Heim >Datenbank >MySQL-Tutorial >Wie wähle ich Benutzer mit mehreren Tags mithilfe von SQL-Joins aus?
So implementieren Sie SQL-Bedingungen für mehrere Zeilen in einem Join
Das vorgestellte Problem dreht sich um die Auswahl von Benutzern, die zwei bestimmte Tags aus einem Join besitzen Betrieb. Während das bereitgestellte Beispiel mit IN Benutzer mit beiden Tags zurückgibt, besteht das gewünschte Ergebnis darin, Benutzer abzurufen, die beide Tags besitzen. Um dies zu erreichen, ist die Nutzung des Schlüsselworts ALL ungeeignet.
Lösungen
1. Testen verschiedener Zeilen
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')
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')
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'
2. Aggregierte Zeilen
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
(MySQL Specific) 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 wähle ich Benutzer mit mehreren Tags mithilfe von SQL-Joins aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!