使用INNER JOIN堆叠ON子句

时间:2017-06-22 11:41:19

标签: sql sql-server tsql relational-database

我看到了这个连接,我想知道这个语法来自何处。

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

奇怪的是,我只能在第一个BB子句中引用表CCON而不是表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

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

1 个答案:

答案 0 :(得分:0)

我相信这里发生的一切都是查询将CC表加入到您的BB表而不是AA,就像它是一个子查询一样。如果您稍微更改查询的布局,您将能够以与case表达式相同的方式看到此嵌套连接:

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