Maison > base de données > tutoriel mysql > le corps du texte

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

Linda Hamilton
Libérer: 2024-10-23 21:43:30
original
308 Les gens l'ont consulté

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');
Copier après la connexion

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'
Copier après la connexion

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');
    Copier après la connexion
  • OR Condition avec IS NULL :

    Error IS NULL OR Error not in ('Timeout','Connection Error');
    Copier après la connexion
  • CASE Expression avec court-circuit :

    CASE WHEN Error IS NULL THEN 1
     ELSE Error not in ('Timeout','Connection Error') THEN 1
     END = 1
    Copier après la connexion

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');
Copier après la connexion

La requête :

select 'hulk' as x, msg, description
from tbl where msg not in ('bruce','banner');
Copier après la connexion

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!

source:php
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!