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 :
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!