Maison >base de données >tutoriel mysql >Comment sélectionner des utilisateurs avec « tag1 » et « tag2 » dans SQL à l'aide de JOIN ?

Comment sélectionner des utilisateurs avec « tag1 » et « tag2 » dans SQL à l'aide de JOIN ?

DDD
DDDoriginal
2024-12-28 02:08:09856parcourir

How to Select Users with Both 'tag1' and 'tag2' in SQL Using JOINs?

Conditions sur plusieurs lignes dans les JOIN SQL

Problème : Application de conditions sur plusieurs lignes dans un JOIN pour récupérer les enregistrements correspondants.

Objectif : Sélectionner les utilisateurs qui possèdent à la fois 'tag1' et Balises 'tag2'.

Application

Il existe deux approches principales pour résoudre ce problème :

1. Test des lignes individuelles

A. 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')

B. 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') 

C. REJOINS :

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. Agrégation des lignes

A. COMPTES :

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

B. Traitement des 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 

Considérations

  • Test des lignes individuelles : Convient aux petits ensembles de données, mais les performances peuvent souffrir pour de grandes quantités de données.
  • Agrégation de lignes : Plus évolutive en termes de performances, mais présente des limites si des doublons peuvent exister au sein de l'agrégat.
  • Compatibilité des bases de données : Les techniques de traitement des chaînes peuvent nécessiter des extensions spécifiques à la base de données.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn