Maison > base de données > tutoriel mysql > 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
Libérer: 2024-10-24 05:45:02
original
772 Les gens l'ont consulté

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

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

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

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!

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