SQL 从两个表中选择行,其中一列是公共列,但另一列可能为空


SQL Selecting rows from two tables where one column is common but another may be null

我从两个表中选择,其中表1 Person有人员,person_id,姓名等的详细信息,以及表2 PersonSong(这是另一个表的一对多表Song),它有person_id,song_id。

我有5个人,[1,2,3,4,5]。

每个人都可以拥有多首歌曲,这些歌曲在PersonSong中。

需要一个查询来显示我,以向我显示具有我搜索的song_id的人员列表,即使它是空的。

例如

               Person                               PersonSong
person_id       name        facebookId  |    person_id      song_id
                                        |
1               Bob         123         |            1          5
2               Bill        456         |            1          9
3               Jake        789         |            2          2
4               Mary        951         |            1          10
5               Kate        753         |            2          3
                                        |            3          5
                                        |            4          5
                                        |            5          8
                                        |            5          5

如果我使用 person_id = 5 进行搜索,答案应该是,

Answer
person_id    person    facebookId    song_id
1            Bob       123           5
2            Bill      456           NULL
3            Jake      789           5
4            Mary      951           5
5            Kate      753           5

我想要一个包含所有人及其数据的列表,并指示他们是否知道当前的歌曲 ID。

你似乎只想要一个left join

select p.*, ps.song_id
from person p left join
     personsong ps
     on p.person_id = ps.person_id and
        ps.song_id = 5;

您可以尝试使用子查询,即使表中没有连接,也可以获取 Person 的完整列表 人物之歌

SELECT 
    p.person_id, p.name, p.facebookId,
    (SELECT 
            song_id
        FROM
            PersonSong ps
        WHERE
            ps.person_id = p.person_id
                AND ps.song_id = 5 LIMIT 1) as song_id
FROM
    Person p