Maison >base de données >tutoriel mysql >Comment utiliser correctement « NOT IN » avec une liste de valeurs 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.
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';
et ensuite essayer de l'utiliser dans une condition "WHERE NOT IN":
WHERE id_campo not in (@idcamposexcluidos)
entraîne souvent des erreurs ou résultats inattendus.
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
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!