Maison  >  Article  >  base de données  >  Comment gérer les valeurs NULL avec le mot-clé IN dans les requêtes MySQL ?

Comment gérer les valeurs NULL avec le mot-clé IN dans les requêtes MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-24 05:45:02686parcourir

How to Handle NULL Values with IN Keyword in MySQL Queries?

Le mot clé MySQL IN exclut les valeurs NULL

Lors de l'utilisation du mot clé IN dans une requête MySQL pour filtrer les lignes en fonction de valeurs spécifiques, des résultats inattendus peuvent se produire lorsque vous travaillez avec des valeurs NULL. Cet article étudie la raison de ce comportement et fournit des méthodes pour gérer correctement les valeurs NULL dans de tels scénarios.

La requête que vous avez mentionnée :

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

exclut étonnamment les lignes où la colonne Erreur contient des valeurs NULL. . En effet, le mot-clé IN est sémantiquement équivalent à :

Error <> 'TimeOut' AND Error <> 'Connection Error'

En raison des propriétés des valeurs NULL, l'expression ci-dessus ne peut pas être évaluée comme vraie. Les valeurs NULL ne sont égales à aucune autre valeur, y compris elles-mêmes. Par conséquent, les lignes avec des valeurs NULL dans la colonne Erreur sont filtrées.

Pour inclure des valeurs NULL dans l'ensemble de résultats, vous pouvez ajuster la requête comme suit :

  • COALESCE (Erreur,'') pas dans ('Timeout','Connection Error') : Ceci remplace les valeurs NULL dans la colonne Erreur par une chaîne vide avant de les comparer.
  • L'erreur EST NULL OR Error not in (« Timeout », « Connection Error ») : ceci vérifie explicitement à la fois les valeurs NULL et les valeurs non correspondantes.
  • CAS WHEN Error IS NULL THEN 1 ELSE Error not in ("Timeout", "Connection Error") THEN 1 END = 1 : Ceci utilise une instruction CASE pour convertir les valeurs NULL et correspondantes en 1, dont l'égalité à 1 est ensuite vérifiée.

Un exemple :

create table tbl (msg varchar(100) null, description varchar(100) not null);

insert into tbl values ('hi', 'greet'), (null, 'nothing');

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

Cette requête ne renverra que la ligne où msg est « salut », car les valeurs NULL sont exclues en raison de leur indétermination.

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