我有一张表,上面显示了汽车有哪些颜色。数据示例:

car_id, color_id
151, 1
151, 2
151, 8
190, 1
190, 2
190, 3

也就是说,151号车的颜色是1、2、8号,190号车的颜色是1、2、3号。
我需要的查询,将显示汽车的身份证,为汽车,有一些颜色的身份证。
示例:我需要所有带有1和2颜色标识的汽车,我应该返回汽车标识151190
注意:我应该在query simple中定义颜色id-例如cars_colors (car_id integer,color_id integer).

最佳答案

您可以使用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的示例。您可能会看到如何将其概括为各种不同的可能性。

关于sql - 如何选择具有AND条件的数据到多行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25755628/

10-08 23:48