2017-10-04 2 views
0

J'ai cette configuration de table.Requête auto jointe SQL pour renvoyer les parents ayant au moins deux enfants identiques

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'); 

Je cherche (les parents) de l'ID qui ont au moins park, washington and virginia que le nom (enfant).

J'ai la réponse sur Fiddle. http://sqlfiddle.com/#!6/e7346/1 mais il doit y avoir une meilleure façon de le faire.

Répondre

1

Ce concept est appelé Agrégation conditionnelle. Je suis en train de grouper sur Id, puis en vérifiant s'il y a au moins une entrée pour park, washington, virginia en utilisant having clause et. Ceci devrait répondre à votre question.

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;