Maison > base de données > tutoriel mysql > Comment utiliser correctement « NOT IN » avec une liste de valeurs dans MySQL ?

Comment utiliser correctement « NOT IN » avec une liste de valeurs dans MySQL ?

Barbara Streisand
Libérer: 2025-01-03 12:23:39
original
831 Les gens l'ont consulté

How to Correctly Use

Format approprié pour la liste de valeurs "NOT IN" dans MySQL

Lorsque vous essayez de remplir une variable de table avec une liste de valeurs séparées par des virgules et de l'utiliser comme Filtre "NOT IN", des obstacles courants surviennent. Comprendre la syntaxe correcte et les limites de cette opération est crucial.

Le problème

Comme l'illustre la requête d'origine, définir une variable sur une liste de valeurs séparées par des virgules :

SET @idcamposexcluidos='817,803,495';
Copier après la connexion

et ensuite essayer de l'utiliser dans une condition "WHERE NOT IN":

WHERE id_campo not in (@idcamposexcluidos)
Copier après la connexion

entraîne souvent des erreurs ou résultats inattendus.

La solution

Le nœud du problème réside dans l'attente de valeurs distinctes par la clause IN. Cependant, l'utilisation d'une chaîne séparée par des virgules comme paramètre est effectivement compilée en une seule chaîne dans la clause IN, ce qui entraîne des comparaisons incorrectes.

Pour surmonter ce problème, il faut soit utiliser du SQL dynamique, soit utiliser la fonction FIND_IN_SET() de MySQL. :

SET @idcamposexcluidos='817,803,495';
...
WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
Copier après la connexion

Bien que FIND_IN_SET() offre une solution de contournement, elle a ses limites. Contrairement à l'utilisation d'index, cela entraîne une baisse de performances en exigeant une recherche linéaire dans la liste de valeurs.

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