据我所知,至少在SQL Server中,我们不能使用集合中用于与该表连接的表中的别名。为什么别名限制加入集
在一个示例:
CREATE TABLE A (A1 int, A2 int)
CREATE TABLE B (B1 int, B2 int)
SELECT a.A2
FROM
A as a
INNER JOIN
(SELECT * FROM B as b WHERE b.B1=a.A1) b2 ON b2.B2=a.A2
该查询将导致错误因为别名一个在将被连接到该表的一组正在使用其中别名参阅(甲)。
在SQL Server中,这可以通过使用CROSS APPLY或可能通过重写查询来解决。 (这是不是我的问题)。
我的问题是:为什么这个限制存在?,为什么不让让别名使用SQL Server CROSS APPLY?
我的第一个猜测是:并行性。如果我们可以限制这一点,那么每个似乎连接的集合总是可以并行计算并加入。但这只是一个猜测。它可以更灵活,让我使用别名和加入集之间的计算依赖关系,我猜想CROSS APPLY。
也许没有一个为什么:)
因为'INNER JOIN'不是相关的子查询。 – 2013-02-12 01:11:06