【问题标题】:INNER JOIN Where Clause [duplicate]INNER JOIN Where 子句 [重复]
【发布时间】:2013-08-11 19:08:19
【问题描述】:

做类似的事情有区别吗

SELECT * 
FROM table1 INNER JOIN table2 ON table2.ObjectId = table1.table2ObjectId 
WHERE table2.Value = 'Foo'

对比

SELECT * 
FROM table1 INNER JOIN table2 
ON table2.ObjectId = table1.table2ObjectId AND table2.Value = 'Foo'

【问题讨论】:

  • 两者都有效。您是否看到了意想不到的副作用?
  • 是的,我有一个相当复杂的查询,其中包含许多内部联接,只需将 where 条件移动到内部联接的一部分就会有所不同。这很奇怪,因为您会认为它们是相同的。
  • 如果查询完全由内部连接组成,它不会影响结果(除非您的查询使用可能因计划而异的非确定性结构)。提出一个关于包含查询和结果的新问题。
  • 即使它对结果集无关紧要,table2.Value = 'Foo' 也应该在 WHERE 子句中,因为它并不是加入表。不确定它是否有助于查询优化器。这是另一个很好的相关问题:stackoverflow.com/questions/2509987/…
  • @DarrinDoherty 这很有趣,因为第一个查询中的结果返回 table2.Value 相等且不等于 'Foo' 的记录。而第二个查询只返回等于 'Foo' 的记录。

标签: sql sql-server


【解决方案1】:

不使用内部连接。外连接是放置会产生影响的地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2014-02-07
    • 2019-01-15
    相关资源
    最近更新 更多