我从两个表中选择,其中表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