[英]mysql outer join with where
我有一個數據庫,用戶必須有一個用戶名,而在另一個表上有一個可選的contact_name,每個用戶都給他們提供。
例如:
用戶A可能將用戶B稱為“ FOO”
但是用戶C稱用戶B為“ BAR”
並且用戶D可能沒有給用戶B一個contact_name
因此它應該返回NULL。
下面的查詢可以使我獲得所有用戶名和contact_names,即使將其作為NULL也是理想的結果。
SELECT Login.username, PhoneNumber.phone, AddressBook.contact_name FROM Login
LEFT OUTER JOIN PhoneNumber ON Login.id = PhoneNumber.user_id
LEFT OUTER JOIN AddressBook ON PhoneNumber.phone = AddressBook.phone
但是,我只想返回WHERE AddressBook.user_id = 67
,它將返回與用戶A關聯的用戶名和contact_names。
當前,當我添加WHERE AddressBook.user_id = 67
它不會返回任何具有NULL值的contact_names,但這是預期的,但是我需要那些具有NULL且沒有NULL contact_names的行。
我該怎么辦?
謝謝
如何將AddressBook.user_id = 67
添加到JOIN
:
SELECT l.username, p.phone, a.contact_name
FROM Login l
LEFT OUTER JOIN PhoneNumber p ON l.id = p.user_id
LEFT OUTER JOIN AddressBook a ON p.phone = a.phone AND a.user_id = 67
SELECT Login.username, PhoneNumber.phone, AddressBook.contact_name FROM Login
LEFT OUTER JOIN PhoneNumber ON Login.id = PhoneNumber.user_id
LEFT OUTER JOIN (SELECT contact_name, phone, user_id from AddressBook where user_ID = 67 order by 1,2,3)ON PhoneNumber.phone = AddressBook.phone
我認為這足夠了。 使您的第二個左聯接僅返回用戶ID為67的行。 但說實話,在不了解您的人際關系的情況下,這很難說。
電話號碼真的是您唯一可以加入的領域嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.