Anhand Ihrer ersten Anfrage zum Durchsetzen von Bedingungen über mehrere Zeilen in einem Join wollen wir die verfügbaren Techniken näher erläutern.
1A. Verwendung von EXISTS:
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. Verwendung von Unterabfragen:
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 nutzen:
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'
2A. Verwendung von COUNTs:
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. Verwendung von String-Verarbeitung:
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
Hinweis: Dieser Ansatz nutzt MySQL-spezifische Erweiterungen und ist im Vergleich zu anderen ineffizient.
Das obige ist der detaillierte Inhalt vonWie erzwinge ich Bedingungen über mehrere Zeilen hinweg, wenn ich Tabellen in SQL verbinde?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!