2012-04-29 8 views
7

Unter Berücksichtigung der Beispieltabelle unten:SQL Query für ein bestimmtes Szenario

Profile_ID Child_ID 

1   1 
1   2 
1   3 

2   1 
2   2 

3   1 
3   2 
3   3 
3   5 

ich eine SQL-Abfrage erstellen möchten, die mir die Profil-IDs gibt, die Kinder anwendbar sind 1 und 2 und 3 ... dies bedeutet, Diese Profil_ID 2 wird nicht im Ergebnis sein, da Profil 2 nur auf die Kinder 1 und 2 angewendet wird. Aber ich erwarte, dass Profil 3 enthalten ist.

Meine Idee ist etwas ähnlich wie diese

SELECT Profile_ID 
FROM table 
WHERE Child_ID IN (1 AND 2 AND 3) 

Nun, ich bin mir sehr wohl bewusst, dass IN dient als OR Funktion ... Gibt es eine ähnliche Art und Weise ähnliche Funktionalität wie die IN Klausel mit einem zu erreichen AND eher als OR?

Vielen Dank im Voraus für Ihre Hilfe.

+2

sehr gute Frage! interessante situation! – test

Antwort

7

Try this:

select profile_id from t 
where child_id in (1, 2 ,3) 
group by profile_id 
having count(distinct child_id) = 3 

Hier die fiddle ist zu spielen.

HINWEIS: Stellen Sie sicher, dass 3 der Anzahl der Elemente in der in-Klausel entspricht.

+0

statt der Gruppe nach profile_id, ist es möglich, die select-Anweisung zu ändern, um eine andere Profil-ID auszuwählen? – test

+1

@test Nein. Ich gruppiere nicht, um eine eindeutige profile_id zu erhalten, sondern um eine Zählung für die resultierende Gruppe durchführen zu können. Eine eindeutige Klausel erlaubt mir das nicht. –

+1

danke mein Freund – test