Maison >base de données >tutoriel mysql >Comment le mot clé IN de MYSQL gère-t-il les valeurs NULL dans les comparaisons ?

Comment le mot clé IN de MYSQL gère-t-il les valeurs NULL dans les comparaisons ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-23 21:43:30403parcourir

How Does MYSQL's IN Keyword Handle NULL Values in Comparisons?

Traitement par mot-clé MYSQL IN des valeurs NULL

Les requêtes SQL utilisent souvent le mot-clé IN pour filtrer les résultats en fonction d'un ensemble de valeurs spécifiées. Cependant, lorsqu'il s'agit de valeurs NULL, le mot clé IN de MYSQL présente un comportement unique qui nécessite d'être pris en compte.

Problème : le mot clé IN exclut les valeurs NULL

Considérez la requête suivante :

select count(*) from Table1 where CurrentDateTime>='2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');

Cette requête vise à exclure les lignes avec des valeurs d'erreur de « Délai d'expiration » ou « Erreur de connexion », mais elle omet de manière inattendue les lignes où l'erreur est NULL. Pour prendre en compte les valeurs NULL, une condition supplémentaire (OR Error est NULL) doit être ajoutée.

Raison de l'exclusion NULL

Le mot clé IN compare les expressions utilisant des valeurs booléennes ( 1/0). Cependant, dans certains cas, il peut renvoyer NULL au lieu de valeurs booléennes. Lorsque Error est NULL, l'expression IN devient :

Error <> 'Timeout' AND Error <> 'Connection Error'

Les règles de comparaison nulles s'appliquent ici. Comme la valeur de l'erreur est NULL, l'expression ne peut pas être évaluée comme vraie ou fausse.

Solutions pour inclure des valeurs NULL

Pour inclure des lignes avec des valeurs NULL, on peut utilisez les solutions suivantes :

  • COALESCE avec IN :

    COALESCE(Error,'') not in ('Timeout','Connection Error');
  • OR Condition avec IS NULL :

    Error IS NULL OR Error not in ('Timeout','Connection Error');
  • CASE Expression avec court-circuit :

    CASE WHEN Error IS NULL THEN 1
     ELSE Error not in ('Timeout','Connection Error') THEN 1
     END = 1

Exemple

Considérez les données suivantes :

create table tbl(msg varchar(100) null, description varchar(100) not null);
insert into tbl values('hi', 'greet'), (null, 'nothing');

La requête :

select 'hulk' as x, msg, description
from tbl where msg not in ('bruce','banner');

Renverra uniquement « salut » car l'expression NOT IN est évaluée à NULL pour la ligne avec une valeur de message NULL.

Conclusion

Le mot-clé IN dans MYSQL traite les valeurs NULL comme un cas particulier lors des comparaisons. Les développeurs utilisant IN doivent être conscients de ce comportement et mettre en œuvre une gestion appropriée pour éviter d'exclure ou de mal interpréter les lignes avec des valeurs NULL.

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