Maison >base de données >tutoriel mysql >Comment appliquer des conditions sur plusieurs lignes lors de la jointure de tables en SQL ?
Considérant votre demande initiale concernant l'application de conditions sur plusieurs lignes dans une jointure, développons les techniques disponibles.
1A. Utilisation d'EXISTE :
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. Utilisation de sous-requêtes :
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. Tirer parti des JOIN :
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. Utilisation de COUNT :
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. Utilisation du traitement de chaînes :
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
Remarque : cette approche utilise des extensions spécifiques à MySQL et est inefficace par rapport aux autres.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!