Überprüfen Sie, ob eine Spalte ALLE Werte einer anderen Spalte in einer MySQL-Datenbank enthält
Betrachten Sie zwei Tabellen, T1 und T2, mit Folgendem Strukturen:
T1:
personID | stuffID |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
1 | 4 |
2 | 1 |
2 | 4 |
3 | 1 |
3 | 2 |
T2:
stuffID |
---|
1 |
2 |
3 |
Ziel ist es, alle personID-Werte abzurufen aus T1, die jedem stuffID-Wert in T2 zugeordnet sind. Für dieses Beispiel wäre das Ergebnis 1, da nur personID 1 Datensätze für alle drei in T2 vorhandenen stuffIDs hat.
Lösung:
Um dies zu erreichen, können wir verwenden ein zweistufiger Prozess:
Schritt 1: Übereinstimmung identifizieren Datensätze
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2)
Diese Unterabfrage ruft alle PersonID-Werte aus T1 ab, die mindestens eine passende StuffID in T2 haben.
Schritt 2: Auf Vollständigkeit prüfen
GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
Dieser Teil gruppiert die Ergebnisse aus Schritt 1 nach Personen-ID und prüft, ob die Anzahl der unterschiedlichen StuffID-Werte für jede Gruppe vorhanden ist ist gleich der Anzahl der stuffID-Werte in T2. Wenn ja, bedeutet dies, dass personID mit allen stuffID-Werten aus T2 verknüpft ist.
Abschließende Abfrage:
In Kombination beider Schritte wird mit der letzten Abfrage überprüft, ob eine Spalte enthält Alle Werte einer anderen Spalte in MySQL sind:
SELECT personID FROM T1 WHERE stuffID IN (SELECT stuffID FROM T2) GROUP BY personID HAVING COUNT(DISTINCT stuffID) = (SELECT COUNT(stuffID) FROM T2)
Das obige ist der detaillierte Inhalt vonWie überprüfe ich, ob eine MySQL-Spalte alle Werte einer anderen Spalte enthält?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!