Ich habe eine Tabelle wie unten, enthält eine Reihe von Groups
, die (in sich selbst) Values
einzigartig enthalten. Ich möchte herausfinden, welche Gruppen vollständige Untergruppen anderer Gruppen sind. Gruppen sollten natürlich nicht als Teilmengen von sich selbst gezählt werden.Finden Sie Gruppen in SQL, die Teilmengen anderer Gruppen sind
GroupTable:
ID | Group | Value
==================
00 | A | 1
01 | A | 2
02 | A | 3
03 | B | 1
04 | B | 3
05 | C | 7
06 | D | 2
Was ich will (Jedes Element in den Smaller
Gruppen in den Bigger
Gruppen enthalten):
Smaller | Bigger
================
B | A
D | A
Ich habe ein paar verschiedene Abfragen versucht, aber ich kann Wickeln Sie meinen Kopf herum, wie man benötigt jedes Element in der Bigger
Gruppe, um in der Samller
Gruppe zu sein.
Das Beste, was ich habe in der Lage zu tun, ist dies, die Gruppen, die jeden passenden Value
in einer anderen Gruppe finden soll enthalten. Wie kann ich die beliebige zu einer alle drehen?
-- Groups where G1 ⊆ G2
SELECT G1.Group, G2.Group
FROM GroupTable G1
JOIN GroupTable G2 ON G2.Group <> G1.Group
WHERE G1.Value = G2.Value
GROUP BY G1.Group, G2.Group;