Heim >Datenbank >MySQL-Tutorial >Wie wähle ich Elemente mit mehreren spezifischen Spaltenwerten zeilenübergreifend in MySQL aus?

Wie wähle ich Elemente mit mehreren spezifischen Spaltenwerten zeilenübergreifend in MySQL aus?

DDD
DDDOriginal
2024-10-28 18:54:02224Durchsuche

How to Select Items with Multiple Specific Column Values Across Rows in MySQL?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn