【问题标题】:Stacking ON clauses with INNER JOIN使用 INNER JOIN 堆叠 ON 子句
【发布时间】:2017-06-22 11:41:18
【问题描述】:

我看到了这个连接,我想知道这个语法是从哪里来的。

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

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

【问题讨论】:

  • 这是一种糟糕的连接方式——就像有人不使用 ON 子句而是将所有内容都放在 WHERE 子句中一样。

标签: sql sql-server tsql relational-database


【解决方案1】:

我相信这里发生的只是查询将您的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;

【讨论】:

  • 所以它限制了连接的范围,对执行有什么想法吗?
猜你喜欢
  • 2010-11-04
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多