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

时间:2016-01-23 14:11:35

标签: php html mysql sql

我从两个表中选择,其中table1 Person具有person,person_id,name等的详细信息以及table2 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的指示。

2 个答案:

答案 0 :(得分:1)

您似乎只想要一个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;

答案 1 :(得分:0)

您可以尝试使用子查询,即使表中没有连接,也可以获得完整的Person列表PersonSong

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