自联接SQL查询以返回至少具有两个相同子级的父级

时间:2017-10-04 22:09:48

标签: sql sql-server database group-by self-join

我有这个表设置。

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为名(孩子)的身份证(父母)。

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

1 个答案:

答案 0 :(得分:1)

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

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;