2015-11-11 47 views
1

好吧,我有三個表,ColorsPeopleLikes同時具有Y和Z(SQL)選擇X

Colors包含ID和名稱的顏色,People包含IDS和人名,Likes包含color_idpeople_id來描述哪些人喜歡哪種顏色。

現在,給出一個顏色列表,我如何選擇每個喜歡列表中每種顏色的人(如果有的話)?

回答

3
select p.id, p.name 
from people p 
join likes l on l.people_id = p.id 
join colors c on l.color_id = c.id 
where c.name in ('blue','green','red') 
group by p.id, p.name 
having count(distinct c.name) = 3 
1

您可以GROUP BY加入喜歡的人,並檢索那些HAVING COUNT(*)與Color列表中的行數相等的元組。這樣,您

  • 只需要連接兩個表
  • 不需要明確命名的顏色。
0
SELECT * FROM People p 
INNER JOIN Likes l ON l.people_id = p.people_id 
INNER JOIN Colors c ON l.color_id = c.color_id 
WHERE c.name IN ('List of colors') 
相關問題