2017-06-20 28 views
1

當我試試這個:MySQL在LEFT JOIN子句中忽略AND嗎?

SELECT 
    order.id, 
    order.active, 
    user.id 
FROM order 
LEFT JOIN user on user.id = order.user_id AND order.active = 1; 

它返回只有移動我和條款到哪裏獲得預期的結果後,有active = 0 OR active = 1

結果集:

SELECT 
    order.id, 
    order.active, 
    user.id 
FROM order 
LEFT JOIN user on user.id = order.user_id 
WHERE order.active = 1; 

現在只能排, active = 1顯示

+1

這是'LEFT'加入的性質。你瞭解'INNER'和'OUTER'加入的區別嗎? –

+0

只有where'指定'你想要的過濾器 – Krishnakumar

+1

可能重複的[SQL連接:where子句與on子句](https://stackoverflow.com/questions/354070/sql-join-where-clause-vs-on-子句) – Utsav

回答

2

這就是它應該如何工作。您將使用兩個條件加入user,並且必須滿足這兩個條件才能從中檢索記錄,否則您將看到來自user表的空值。

現在,在第二個查詢中,您只需加入一個條件,然後過濾連接的結果集,然後在您的情況下,該連接就會變成內部連接。

更新。

您的第一個查詢將返回您表中的每一個訂單,並且如果該訂單處於活動狀態,則可以選擇返回用戶。非活動訂單將以用戶身份爲空。它不會限制您的訂單,它只是告訴MySQL爲每個活動記錄返回用戶

第二個查詢將返回所有活動訂單以及該訂單的可選用戶。

+0

你'已經涵蓋了所有與我相同的點,但措辭更好 - 刪除我的回答。 – Bridge

+0

...除最後一部分 - 它不是一個內部連接,來自訂單不匹配用戶的行仍將返回 – Bridge

+0

@Bridge我想它可以說我贏了比賽條件☺️ –