日期:2014-05-16  浏览次数:20584 次

MSSQL 的语法JOIN ON 后面 能不能加一个自己查询定义的表
如题:

举例

SELECT [表1].[ID],[表1].[NAME] FROM [表1] join (select [表2].[ID],[表2].[NAME] FROM [表2] WHERE 一些判断条件 )  AS [临表1] on [表1].[ID]=[临表1].[ID] 

相当这样的!如果没有,那有什么别的方法不!
------解决方案--------------------
可以这样写啊,你报错?
------解决方案--------------------
当然可以,这是子查询啊,很多时候都需要这样用


------解决方案--------------------
当然可以了,你不会自己试一下吗
------解决方案--------------------
 楼上都是专家,用的实例比较多。
若表的名字很长很烦可以给表起一个简单的别名:
SELECT A.[ID],A.[NAME] FROM [表1] AS A join (select B.[ID],B.[NAME] FROM [表2] AS B WHERE 一些判断条件 ) AS C on A.[ID]=C.[ID]

这样感觉写起来有时稍微能省点时间。
------解决方案--------------------
可以的 把join 後面的表用(條件的臨時表)
------解决方案--------------------
这样写是完全可以的。
------解决方案--------------------
这样写是可以的,如果你经常用到子查询的话,就清楚了
------解决方案--------------------
更正一下,有些小错误

--JOIN可以是临时表,也可以是派生表。例如:

SELECT * INTO #b FROM b WHERE id>100--创建临时表

SELECT *
FROM a INNER JOIN #b ON  a.id=#b.id --连接临时表
---
---
---
---
SELECT *
FROM a
INNER JOIN (SELECT * FROM b WHERE id>100) AS b ON a.id=b.id  --连接派生表

--如果是派生表,关键在于派生查询的表要自定义一个别名,即:AS

------解决方案--------------------
在sql server 2005以后,也支持with表达式,如果下面都多出都需要用这个【临时表】,那么代码只需要在上面定义一次就可以了:

;with [临表1] 
as
(
       select [表2].[ID],[表2].[NAME] 
       FROM [表2] 
       WHERE 一些判断条件 
)

SELECT [表1].[ID],[表1].[NAME] 
FROM [表1] 
join [临表1] 
      on [表1].[ID]=[临表1].[ID] 
      

------解决方案--------------------
当然,你上面的写法是完全正确的,你的临时表,在sql server里一般叫做派生表,是一种非常正规的写法