2015-11-11 46 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') 
相关问题