MySQL-Auswahl-IDs, die in verschiedenen Zeilen mit mehreren spezifischen Spaltenwerten auftreten
Problem:
Das Auswählen von Elementen aus einer assoziativen Tabelle basierend auf mehreren angegebenen Werten für eine bestimmte Spalte ist eine häufige, aber anspruchsvolle Aufgabe. Zum Beispiel anhand der folgenden Tabelle:
item_id | category_id |
---|---|
1 | 200 |
1 | 201 |
1 | 202 |
2 | 201 |
2 | 202 |
3 | 202 |
3 | 203 |
4 | 201 |
4 | 207 |
Das Ziel besteht darin, nur die Elemente auszuwählen, die in beiden oder allen angegebenen Kategorien enthalten sind. Wenn beispielsweise die Kategorie-IDs 201 und 202 angegeben werden, sollten nur die Elemente 1 und 2 zurückgegeben werden.
Lösungen:
1. Selbstverknüpfung:
Diese Methode beinhaltet die Verknüpfung der Tabelle mit sich selbst in der Spalte „item_id“:
<code class="sql">SELECT c1.item_id FROM item_category AS c1 INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id WHERE c1.category_id IN (201, 202)</code>
Diese Abfrage gibt eine verbundene Ergebnismenge mit einer Zeile für jedes eindeutige Paar von zurück Zeilen in der Originaltabelle, die die Category_ID-Kriterien erfüllen.
2. Group BY und HAVING:
Ein alternativer Ansatz ist die Verwendung der GROUP BY- und HAVING-Klauseln:
<code class="sql">SELECT c.item_id, COUNT(*) AS cat_count FROM item_category AS c WHERE c.category_id IN (201, 202) GROUP BY c.item_id HAVING cat_count = 2</code>
Diese Abfrage gruppiert die Zeilen nach item_id und zählt das Vorkommen von Kategorie-IDs 201 und 202 für jede Zeile. Die HAVING-Klausel filtert die Zeilen heraus, die nicht die angegebene Anzahl von Vorkommen aufweisen (in diesem Fall 2).
Das obige ist der detaillierte Inhalt vonWie wähle ich Elemente mit mehreren spezifischen Spaltenwerten zeilenübergreifend in MySQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!