在保持Null值的情况下联接表

Tam*_*Tam 5 sql

我有两个表:

  • 用户:ID,名字,姓氏
  • 网络:user_id,friend_id,状态

我想从用户表中选择所有值,但我想显示特定用户的状态(例如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的话是否有可能做到这一点。

Pet*_*ang 5

您需要将条件放入的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