我有两个表:
我想从用户表中选择所有值,但我想显示特定用户的状态(例如id = 2),而其他用户保持为NULL。例如:如果我有用户:
? first_name last_name
------------------------
1 John Smith
2 Tom Summers
3 Amy Wilson
Run Code Online (Sandbox Code Playgroud)
在网络中:
user_id friend_id status
------------------------------
2 1 friends
Run Code Online (Sandbox Code Playgroud)
我想搜索所有其他用户的John Smith,所以我想得到:
id first_name last_name status
------------------------------------
2 Tom Summers friends
3 Amy Wilson NULL
Run Code Online (Sandbox Code Playgroud)
我尝试先执行LEFT JOIN,然后执行WHERE语句,但是它不起作用,因为它排除了与其他用户(而非该用户)有关系的行。
我可以使用UNION语句来执行此操作,但是我想知道如果没有UNION的话是否有可能做到这一点。
您需要将条件放入的ON子句中LEFT JOIN。
Select
u.first_name,
u.last_name,
n.status
From users u
Left Join networks n On ( ( n.user_id = 1 And n.friend_id = u.id )
Or ( n.friend_id = 1 And n.user_id = u.id )
Where u.id <> 1
Run Code Online (Sandbox Code Playgroud)
如果该用户是该用户的朋友,或者该用户是的朋友,则应该返回所有用户(除外John Smith)和状态。friendJohn SmithJohn Smith