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里一般叫做派生表,是一种非常正规的写法