2017-10-04 8 views
0

このテーブルの設定はあります。少なくとも2つの同じ子を持つ親を返すための自己結合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

このコンセプトを条件付き集計と呼びます。私はIDをグループ化して、句を持ってと公園、ワシントン、バージニアのために少なくとも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; 
関連する問題