2014-09-10 4 views
0

테이블이 있습니다. cars_colors (car_id integer,color_id integer). 자동차에 어떤 색이 있는지 보여줍니다. 데이터의 예 : 의미많은 행에 대해 AND 조건을 사용하여 데이터를 선택하는 방법

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

- IDS 1,2,8 및 IDS 1,2,3와 색상을 가지고 №190 자동차와 색상을 가지고 №151 자동차.

모든 color_id가있는 자동차에 대한 car_id를 표시하는 쿼리가 필요합니다.

예 : I는 1, 2 color_id 모든 차량이 필요, 나는 car_id 반환해야 151,190

참고 : 나는 쿼리 간단한에서 color_id 정의해야합니다 - 당신은 group by하여이 작업을 수행 할 수 있습니다와 같은 in (1,2,3....99,100)

답변

3

을 및 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. 허용하지 않는 예이다 가능성.

+0

감사합니다. 진실을 말하면, 또한 negative color_id가있는 조건이 필요합니다. 그 의미는 - 자동차, 색상이없는 것입니다. 네거티브 하위 쿼리를 사용하여 쿼리를 사용하는 것 – user2572790

관련 문제