我有一个数据库,用户必须拥有一个用户名,而另一个表上有一个可选的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的行。
我该怎么做?
谢谢
答案 0 :(得分:3)
如何将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
答案 1 :(得分:0)
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
我认为这就足够了。使您的第二个左连接仅返回67作为用户ID的行。但老实说,如果不了解你的关系,很难说清楚。
电话号码真的是您可以加入的唯一字段吗?