我有一个数据库,用户必须在其中有一个用户名,而在另一个表上有一个由每个用户赋予他们的可选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