这两个TSQL连接方式有什么区别?

3
我很想知道以下两个查询(使用两种不同的连接语法)之间的区别。我在继承的代码中看到了这个问题,很好奇它们的结果是否总是相同的。如果不同,为什么要选择其中一个而不是另一个。
查询#1示例:
SELECT * FROM TableA a
  INNER JOIN TableB b
    INNER JOIN TableC c
      ON b.TableBId = c.TableCId
     ON b.TableBId = a.TableAId

查询示例 #2:

SELECT * FROM TableA a
  INNER JOIN TableB b
     ON b.TableBId = a.TableAId
  INNER JOIN TableC c
     ON b.TableBId = c.TableCId

3
查看执行计划是否有差异。 - juergen d
你确定#1是有效的SQL吗?根据http://msdn.microsoft.com/en-us/library/ms177634.aspx,我看不出它怎么能工作。 - Alex
3
@Alex 是的,那是有效的SQL语句。这是演示无执行错误的fiddle链接:http://sqlfiddle.com/#!3/b00427/1 - Justin Pihony
3
我觉得查询1很混乱,不是很清晰 - 我个人会一直使用查询2。结果和执行计划都是相同的,因此没有功能上的区别。 - marc_s
查询#1和INNER JOIN (TableB b INNER JOIN TableC c ON b.TableBId = c.TableCId) ON b.TableBId = a.TableAId是一样的吗?如果是的话,基本上是隐式()...如果混合了外部连接,那会非常令人困惑。 - dotjoe
3个回答

2
正如之前所提到的,您可以查看执行计划来验证这些确实是相同的查询。尽管我几乎可以确定它们是相同的。
关于为什么要选择其中一个的更多问题,我认为这归结于样式喜好。大多数时候,您会看到查询#2,因为它对于未来读者有更清晰的定义。如果您创建了真正复杂的查询,则获得的好处将极大增加。
我无法担保另一种方法,因为我确实认为它变得太难以阅读,不应使用。再次强调,这只是我的观点和推理基于个人意见/风格。
然而,标准方式是查询2,所以我会坚持使用它 :)……但还是只代表我个人。

“标准方式是query2” - 两个查询都符合SQL标准(并且语义相等)。 - onedaywhen
@onedaywhen 中的“标准”是指行业标准。是的,两者都是SQL标准,但很少有开发人员会像query1那样编写它。 - Justin Pihony

0

0

您的查询执行计划完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接