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
Libérer: 2024-12-28 02:08:09
original
855 Les gens l'ont consulté

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')
Copier après la connexion

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') 
Copier après la connexion

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'
Copier après la connexion

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
Copier après la connexion

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 
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal