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
Linda Hamiltonoriginal
2024-12-24 03:01:23516parcourir

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');

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');

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';

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;

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;

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