今天我和一些同事讨论了这个问题,我们不能有一个可靠的论据,为什么这不起作用,我们只是知道它没有。
有人可以给我一个可靠的解释吗?
这是查询:
select oh.*,
test.*
from Sales.SalesOrderHeader as oh, (
select *
from Sales.SalesOrderDetail as od
where oh.SalesOrderID = od.SalesOrderID
) as test;
提前多多感谢。
答案 0 :(得分:4)
首先,您不能使用FROM
语法将相关子查询放在JOIN
子句中。
其次,当您使用,
时,它会影响别名的范围。
你可能打算:
select oh.*, test.*
from Sales.SalesOrderHeader oh cross apply
(select *
from Sales.SalesOrderDetail od
where oh.SalesOrderID = od.SalesOrderID
) test;
您也可以将其简称为join
:
select oh.*, od.*
from Sales.SalesOrderHeader oh join
Sales.SalesOrderDetail od
on oh.SalesOrderID = od.SalesOrderID;
这是将逻辑编写为SQL查询的最自然方式。
您的语法让人联想到横向连接的Postgres语法(这是apply
所做的)。在Postgres中,这将是:
select oh.*, test.*
from Sales.SalesOrderHeader oh, lateral
(select *
from Sales.SalesOrderDetail od
where oh.SalesOrderID = od.SalesOrderID
) test;