如果使用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 –