Heim >Datenbank >MySQL-Tutorial >Wie wende ich Bedingungen auf mehrere Zeilen in SQL-Joins an?
Anwenden von Bedingungen auf mehrere Zeilen in einem Join mithilfe von SQL
Bei der Arbeit mit Joins ist es häufig erforderlich, bestimmte Kriterien auf mehrere Zeilen anzuwenden in einer verbundenen Tabelle. Dies kann mithilfe verschiedener Techniken erreicht werden, die entweder das Testen einzelner Zeilen oder das Aggregieren von Zeilen beinhalten.
Testen einzelner Zeilen mithilfe von EXISTS, Unterabfragen und Joins
1A. EXISTS:
Mit dieser Methode können Sie prüfen, ob Zeilen vorhanden sind, die bestimmte Bedingungen erfüllen.
SELECT * FROM users WHERE EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name = 'tag1') AND EXISTS (SELECT * FROM tags WHERE user_id = users.id AND name = 'tag2');
1B. Unterabfragen:
Unterabfragen können auch verwendet werden, um Zeilen basierend auf Bedingungen in verbundenen Tabellen auszuwählen.
SELECT * FROM users WHERE id IN (SELECT user_id FROM tags WHERE name = 'tag1') AND id IN (SELECT user_id FROM tags WHERE name = 'tag2');
1C. JOINs:
INNER JOINs können zum Testen von Bedingungen in mehreren Zeilen verwendet werden. Allerdings ist die Skalierbarkeit dieser Methode im Vergleich zu anderen geringer.
SELECT u.* FROM users u INNER JOIN tags t1 ON u.id = t1.user_id INNER JOIN tags t2 ON u.id = t2.user_id WHERE t1.name = 'tag1' AND t2.name = 'tag2';
Zeilen mithilfe von COUNTs und String-Verarbeitung aggregieren
2A. COUNTs:
Diese Technik basiert auf der Aggregation von Zeilen nach Anzahl. Dies ist wirksam, wenn Tags nicht mehrmals auf denselben Benutzer angewendet werden können.
SELECT users.id, users.user_name FROM users INNER JOIN tags ON users.id = tags.user_id WHERE tags.name IN ('tag1', 'tag2') GROUP BY users.id, users.user_name HAVING COUNT(*) = 2;
2B. String-Verarbeitung:
Für Datenbanken, die String-Verarbeitungserweiterungen wie GROUP_CONCAT und FIND_IN_SET bereitstellen, kann die String-Verarbeitung verwendet werden, um nach mehreren Tags zu suchen. Diese Methode kann jedoch ineffizient sein.
SELECT user.id, users.user_name, GROUP_CONCAT(tags.name) AS all_tags FROM users INNER JOIN tags ON users.id = tags.user_id GROUP BY users.id, users.user_name HAVING FIND_IN_SET('tag1', all_tags) > 0 AND FIND_IN_SET('tag2', all_tags) > 0;
Das obige ist der detaillierte Inhalt vonWie wende ich Bedingungen auf mehrere Zeilen in SQL-Joins an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!