我从两个表中选择,其中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的指示。
答案 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