如何使用AND条件选择数据到多行

时间:2014-09-10 00:38:33

标签: sql postgresql

我有桌子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)

1 个答案:

答案 0 :(得分:3)

您可以使用group byhaving

执行此操作
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的示例。您可以看到如何将其概括为各种不同的可能性。