自加入SQL查询以返回至少有两个相同子项的父项

自加入SQL查询以返回至少有两个相同子项的父项

问题描述:

我有这个表设置。自加入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'); 

我找的ID(父母),至少有park, washington and virginia姓名(孩子)。

我在小提琴上有答案。 http://sqlfiddle.com/#!6/e7346/1但是必须有更好的方法来做到这一点。

这个概念被称为条件聚合。我正在将Id分组,然后通过使用子句和检查来检查公园,华盛顿,弗吉尼亚州是否有至少一个入口。这应该回答你的问题。

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;