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
792 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!

source:php.cn
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