Maison >base de données >tutoriel mysql >Comment simuler efficacement une condition « ET » sur plusieurs lignes dans SQL ?
Simuler un "ET" sur plusieurs lignes en SQL
Dans le domaine des bases de données relationnelles, la récupération efficace des données en fonction de plusieurs critères est cruciale , en particulier lorsqu'il s'agit de grands ensembles de données. Considérons le scénario suivant : un tableau « tags » avec deux colonnes, « tagid » et « contentid », représentant les balises attribuées à divers éléments de contenu. L'objectif est de récupérer le "contentid" du contenu balisé avec un ensemble spécifique de tagids (par exemple, 334, 338 et 342).
Une approche naïve impliquerait des sous-requêtes imbriquées, se traduisant efficacement par :
SELECT contentid FROM tags WHERE tagid = 334 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 338 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 342 ) )
Bien que cette approche fonctionne, elle devient lourde et inefficace pour un grand nombre de tagids. Heureusement, il existe une solution plus efficace et extensible.
Grâce à la puissance des opérations basées sur des ensembles, une seule requête peut être formulée qui élimine le besoin de sous-requêtes :
SELECT contentID FROM tags WHERE tagID IN (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
Cette requête fonctionne en :
Cette solution reste efficace même pour un grand nombre de tagids, car il n'implique pas de sous-requêtes imbriquées ou d'opérations récursives. La complexité temporelle reste linéaire par rapport au nombre de tagids pertinents, ce qui la rend adaptée aux grands ensembles de données et aux requêtes ad hoc.
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!