簡體   English   中英

mysql外部連接在哪里

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM