据我所知,至少在 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
该查询将导致错误,因为在集合中使用了别名a,该集合将连接到别名引用的表 ( A )。
在 SQL Server 中,这可以使用CROSS APPLY来解决,或者可以通过重写查询来解决。(这不是我的问题)。
我的问题是:为什么存在这个限制?,为什么不让使用别名作为 SQL Server CROSS APPLY呢?
我的第一个猜测是:并行性。如果我们可以限制这一点,则似乎连接的每个集合总是可以并行计算然后连接。但这只是一个猜测。它可以更灵活,让我使用连接集之间的别名和计算依赖关系,就像我猜想的那样CROSS APPLY。
也许没有原因:)