我有这个表设置。
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但必须有更好的方法来做到这一点。
答案 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;