2017-10-04 4 views
0

이 테이블 설정이 있습니다.두 개 이상의 동일한 자식이있는 부모를 반환하는 자체 조인 SQL 쿼리

create table holdMyBeer 
(
    Id int, 
    Name varchar(20) 
) 

insert into holdMyBeer 
values (1, 'park'), (1, 'washington'), (1, 'virginia'), 
     (2, 'harbor'), (2, 'premier'), (2, 'park'), 
     (3, 'park'), (3, 'washington'), (3, 'virginia'), (3, 'Ball'); 

나는 적어도 park, washington and virginia 이름으로 (자녀)가있는 ID의 (부모)를 찾고 있어요.

나는 바이올린에 대한 답을 가지고 있습니다. http://sqlfiddle.com/#!6/e7346/1이 작업을 수행하는 더 좋은 방법이 있어야합니다.

답변

1

이 개념을 조건부 집계라고합니다. 나는 이드를 그룹화하고, 그런 다음 절을 사용하여 공원, 워싱턴, 버지니아에 최소한 하나의 항목이 있는지 확인하고있다. 귀하의 질문에 대한 대답입니다.

SELECT Id 
    FROM holdMyBeer 
GROUP BY Id 
HAVING SUM(CASE WHEN Name = 'park' THEN 1 ELSE 0 END) >= 1 AND 
     SUM(CASE WHEN Name = 'washington' THEN 1 ELSE 0 END) >= 1 AND 
     SUM(CASE WHEN Name = 'virginia' THEN 1 ELSE 0 END) >= 1;