作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下两个例子。
1. 示例(WHERE)
SELECT 1
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
WHERE t2.field = true
SELECT 1
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id AND t2.field = true
最佳答案
如果过滤器输入 JOIN
功能上的条件(即它是一个实际的连接条件,而不仅仅是一个过滤器),它必须出现在 ON
中该连接的子句。
值得注意:
WHERE
相反,如果连接是 INNER
,则性能相同。 ,否则不同。正如评论中提到的,这并不重要,因为无论如何结果是不同的。 WHERE
真正是 OUTER JOIN
的条款条件隐含地取消了 OUTER
条件的性质(“即使没有记录也加入”),因为这些过滤器首先意味着必须存在现有记录。示例:... table1 t LEFT JOIN table2 u ON ... AND t2.column = 5
是正确的
... table1 t LEFT JOIN table2 u ON ...
WHERE t2.column = 5
t2.column = 5
告诉引擎来自 t2 的记录是预期的,这与外连接背道而驰。异常(exception)情况是
IS NULL
过滤器,例如
WHERE t2.column IS (NOT) NULL
(这实际上是一种构建条件外连接的便捷方式)
LEFT
和 RIGHT
连接是隐式的 OUTER
加入。 关于SQL JOIN 在哪里放置 WHERE 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483808/
我是一名优秀的程序员,十分优秀!