我今天打錯了一個查詢,但它仍然工作,並給出了預期的結果。我的意思是運行此查詢:WHERE子句或ON子句中的INNER JOIN條件?
SELECT e.id FROM employees e JOIN users u ON u.email=e.email WHERE u.id='139840'
,但我不小心碰到這個查詢
SELECT e.id FROM employees e JOIN users u ON u.email=e.email AND u.id='139840'
(注意的AND
代替WHERE
最後子句中)
兩者返回正確的員工ID來自用戶ID。
這2個查詢有什麼區別?第二種形式是否只加入滿足條件的兩個表中的成員,而第一種形式會加入整個表,然後運行查詢?一個或多或少比另一個更有效率?我錯過了什麼嗎?
謝謝!
查詢優化器可能將它們視爲等同,因爲它們具有相同的含義... –
如果你切換到'LEFT OUTER JOIN',那麼只有第二次woud work'如預期' – Strawberry
[INNER JOIN ON vs WHERE子句]的可能重複(http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-條款) –