Maison >base de données >tutoriel mysql >Comment trouver efficacement l'intersection de plusieurs conditions de lignes dans SQL ?

Comment trouver efficacement l'intersection de plusieurs conditions de lignes dans SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-04 12:44:40764parcourir

How to Efficiently Find the Intersection of Multiple Row Conditions in SQL?

Résoudre l'intersection « ET » sur plusieurs lignes dans SQL

Interroger une base de données pour récupérer des données en fonction de plusieurs conditions est une tâche courante. Cependant, lorsque les conditions doivent être appliquées sur plusieurs lignes, l’approche peut devenir complexe. Cet article présente une solution plus efficace pour de tels scénarios, éliminant le besoin de sous-requêtes.

Considérez le tableau "tags" avec les colonnes "tagid" et "contentid". Pour trouver le « contentid » de chaque élément de contenu balisé avec les tagids 334, 338 et 342, l'approche traditionnelle implique des sous-requêtes imbriquées. Cependant, cette méthode devient moins efficace à mesure que le nombre de conditions augmente.

L'approche optimisée évite les sous-requêtes, ce qui se traduit par des performances de requête plus rapides et plus extensibles. Voici la requête révisée :

SELECT contentID
FROM tags
WHERE tagID in (334, 338, 342)
GROUP BY contentID
HAVING COUNT(DISTINCT tagID) = 3

Cette requête réalise l'intersection en utilisant l'opérateur "IN" avec une liste de tagids. La clause "GROUP BY" regroupe les résultats par "contentID" et la clause "HAVING" filtre les résultats pour inclure uniquement le contenu qui possède tous les tagids spécifiés.

En général, ce modèle peut être étendu pour rechercher l'intersection d'un nombre quelconque de balises :

SELECT contentID
FROM tags
WHERE tagID in (...) --taglist
GROUP BY contentID
HAVING COUNT(DISTINCT tagID) = ... --tagcount

En remplaçant les espaces réservés "taglist" et "tagcount" par les valeurs souhaitées, cette requête peut trouver efficacement le contenu qui répond aux critères d'intersection.

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