我有两个下面的例子。SQL JOIN在哪里放置WHERE条件?
1例(WHERE)
SELECT 1
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id
WHERE t2.field = true
2例(加入和)
SELECT 1
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id AND t2.field = true
什么是性能方面的更快的方法?你喜欢哪个?
此答案包含一些错误和混乱的文字。 1.对于INNER JOIN,只要没有插入的OUTER JOIN,任何条件都可以在WHERE而不是ON。 2.当将LEFT JOIN条件从ON移动到WHERE时,由于(如您所说)一般情况下结果不同,所以性能无关。 3.这种差异通常不会将“外部连接转换为内部连接”。 – philipxy 2016-06-27 12:16:01
@philipxy你是对的,我试图清理一下 – Sebas 2017-05-01 10:44:37
“过滤器在JOIN条件下功能上进入”还是“[过滤器]是实际连接条件,而不仅仅是过滤器”是什么意思?无论如何,“只是一个过滤器”的概念是没有用的,因为'JOIN ON c AND d'与'JOIN ON c WHERE d'相同。 (实际上,SQL标准*根据JOIN WHERE定义* JOIN ON。)类似地,“隐式地取消条件的OUTER特性”*仅仅不传递任何东西*。你似乎同意你的看法,因为你用恐吓引语(因此本身不清楚)对它进行注释“(”即使没有记录也加入)“。你没有解释。 – philipxy 2017-05-01 11:01:35