用INNER JOIN堆叠ON子句

问题描述:

我看到了这个连接,我想知道这个语法来自哪里。用INNER JOIN堆叠ON子句

SELECT * 
    FROM [dbo].[AA] 
INNER JOIN dbo.BB 
INNER JOIN dbo.CC ON BB.ID = CC.BB_ID 
        ON AA.ID = BB.AA_ID 

奇怪的是,我只能引用表第一ON条款BBCC,而不是表AA

通常我会记下第一个表名,然后记下连接条件。

SELECT * 
    FROM [dbo].[AA] 
INNER JOIN dbo.BB ON AA.ID = BB.AA_ID 
INNER JOIN dbo.CC ON BB.ID = CC.BB_ID 

我的问题是什么是第一语法的背景下,如果有在执行任何影响,到目前为止,我没有看到它。

+0

它写一个加入的一个好办法:如果您更改您的查询的布局一点,你将能够看到这样的嵌套加入以同样的方式,你会一个case表达ON子句,而是将所有内容放在WHERE子句中。 – scsimon

我相信这里发生的一切都是,查询将您的CC表加入到BB表中,而不是AA,就好像它是子查询一样。就像一个人没有使用 -

select * 
from [dbo].[AA] 
    inner join dbo.BB 
       inner join dbo.CC 
       on BB.ID = CC.BB_ID 
    on AA.ID = BB.AA_ID; 
+0

因此,它限制了连接的范围,对执行的任何想法? – Ako