如果使用LEFT JOIN并且还有WHERE子句,那么如果试图加入的表不存在,是否忽略了WHERE子句中的所有条件?SQL:LEFT JOIN>如果ON条件失败,则忽略WHERE语句中的条件?
换句话说,我是否必须专门与来自LEFT JOIN的ID进行比较?
SELECT distinct(watchedItems.id)
FROM globalItems, watchedItems
LEFT JOIN bidGroups ON bidGroups.bidGroupID = watchedItems.bidGroupID
WHERE
watchedItems.aid = globalItems.aid
AND watchedItems.processRunning = 0
(watchedItems.bidGroupID IS NULL
OR (watchedItems.bidGroupID IS NOT NULL AND bidGroups.bidGroupQty > 0))
我可以写,而不是整个最后一位刚刚
AND bidGroups.bidGroupQty > 0
,它不会被测试,因为如果LEFT JOIN失败bidGroups不存在?我知道如果没有LEFT JOIN,它肯定会一直对它进行测试,这意味着如果这个测试失败了,整个语句就不会执行。但我希望在任何情况下都能执行它(带和不带bidGroups)。
您需要停止使用隐式语法,这是很差的编程习惯,几乎在20年前被取代。像在这里完成的那样组合隐式和显式语法也会导致某些数据库的结果不正确。隐式语法更难以维护(特别是当您想要添加左连接,或者如果您不知道交叉连接是有意的还是偶然的)并且更可能包含影响设置的错误(例如意外交叉连接)时。 – HLGEM
感谢您的建议HLGEM。我从来不知道这两者之间是有区别的。对于其他读者来说,这里有一个有用的信息链接:http://www.cactusjuice.com/blogs/archive/2006/12/12/SQL-Server-JOIN-Syntax-Explicit-vs-Implicit。aspx –