我有一张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的汽车,其中有一些color_id。
我需要所有有1和2 color_id的汽车,我应该返回car_id 151,190
注意:I应该在查询简单(如in (1,2,3....99,100) )中定义color_id
发布于 2014-09-10 00:41:46
您可以使用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。您可能会看到如何概括这一广泛的各种不同的可能性。
https://stackoverflow.com/questions/25755628
复制相似问题