繁体   English   中英

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

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

我从两个表中进行选择,其中table1 Person具有人员,person_id,姓名等详细信息,并从table2 PersonSong(这是另一个表Song的一对多表)中进行选择,其中具有person_id,song_id。

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

每个人可以在PersonSong中播放多首歌曲。

我需要一个查询来显示我要搜索的具有song_id的人员列表,即使该列表为null。

例如

               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;

您可以尝试使用子查询,即使没有连接到表PersonSong的情况下,它也将允许您获取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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM