Maison > base de données > tutoriel mysql > Comment appliquer des conditions à plusieurs lignes dans les jointures SQL ?

Comment appliquer des conditions à plusieurs lignes dans les jointures SQL ?

Linda Hamilton
Libérer: 2024-12-24 03:01:23
original
581 Les gens l'ont consulté

How to Apply Conditions to Multiple Rows in SQL Joins?

Application de conditions à plusieurs lignes dans une jointure à l'aide de SQL

Lorsque vous travaillez avec des jointures, il est souvent nécessaire d'appliquer des critères spécifiques à plusieurs lignes dans une table jointe. Ceci peut être réalisé à l'aide de diverses techniques qui impliquent soit de tester des lignes individuelles, soit de regrouper des lignes.

Test de lignes individuelles à l'aide d'EXISTS, de sous-requêtes et de jointures

1A. EXISTE :

Cette méthode permet de vérifier l'existence de lignes qui satisfont à certaines conditions.

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

1B. Sous-requêtes :

Les sous-requêtes peuvent également être utilisées pour sélectionner des lignes en fonction des conditions dans les tables jointes.

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

1C. JOIN :

Les INNER JOIN peuvent être utilisées pour tester des conditions sur plusieurs lignes. Cependant, l'évolutivité de cette méthode est inférieure à celle des autres.

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

Agrégation de lignes à l'aide de COUNT et du traitement de chaînes

2A. COUNTs :

Cette technique repose sur l'agrégation des lignes par nombre. Il est efficace lorsque les balises ne peuvent pas être appliquées plusieurs fois au même utilisateur.

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

2B. Traitement des chaînes :

Pour les bases de données qui fournissent des extensions de traitement de chaînes, telles que GROUP_CONCAT et FIND_IN_SET, le traitement des chaînes peut être utilisé pour vérifier plusieurs balises. Cependant, cette méthode peut s'avérer inefficace.

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

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