INNER JOIN Where 子句 [重复]

Posted

技术标签:

【中文标题】INNER JOIN Where 子句 [重复]【英文标题】:INNER JOIN Where Clause [duplicate] 【发布时间】: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 子句中,因为它并不是加入表。不确定它是否有助于查询优化器。这是另一个很好的相关问题:***.com/questions/2509987/… @DarrinDoherty 这很有趣,因为第一个查询中的结果返回 table2.Value 相等且不等于 'Foo' 的记录。而第二个查询只返回等于 'Foo' 的记录。 【参考方案1】:

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

【讨论】:

以上是关于INNER JOIN Where 子句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

`INNER JOIN` 过滤条件在查询中的位置; `ON` 或 `WHERE` 子句 [关闭]

INNER JOIN 之前的 WHERE 子句

带有 WHERE 子句的 SQL INNER JOIN 到 LINQ 格式

带有 WHERE 子句和 INNER JOIN 的 MySQL 更新查询不起作用

Oracle中Inner join和Where的区别

Oracle中Inner join和Where的区别