我有桌子cars_colors (car_id integer,color_id integer).
这表明 - 汽车有哪些颜色。数据示例:
car_id, color_id
151, 1
151, 2
151, 8
190, 1
190, 2
190, 3
这意味着 - 汽车№151的颜色为ids 1,2,8,而汽车№190的颜色为ids 1,2,3。
我需要查询将显示car_id for cars,其中包含所有color_id。
示例:我需要所有带有1和2 color_id的车,我应该返回car_id 151,190
注意:我应该在查询中简单定义color_id - 例如in (1,2,3....99,100)
答案 0 :(得分:3)
您可以使用group by
和having
:
select car_id
from car_colors
where color_id in (1, 2)
group by car_id
having count(distinct color_id) = 2;
编辑:
这种方法的一般形式如下:
select car_id
from car_colors
group by car_id
having sum(case when color_id = 1 then 1 else 0 end) > 0 and
sum(case when color_id = 2 then 1 else 0 end) > 0 and
sum(case when color_id = 3 then 1 else 0 end) = 0;
这是一个需要颜色1和2但不允许使用颜色3的示例。您可以看到如何将其概括为各种不同的可能性。