Maison > base de données > tutoriel mysql > Comment gérer les valeurs NULL dans le mot clé IN de MySQL pour un filtrage précis ?

Comment gérer les valeurs NULL dans le mot clé IN de MySQL pour un filtrage précis ?

Barbara Streisand
Libérer: 2024-10-23 16:09:02
original
444 Les gens l'ont consulté

How to Handle NULL Values in MySQL's IN Keyword for Accurate Filtering?

Comprendre la gestion NULL dans le mot-clé IN de MySQL

Le mot-clé IN de MySQL renvoie un résultat booléen, mais il est important de noter que ce n'est pas toujours le cas renvoie 1 (vrai) ou 0 (faux). Le cas particulier de NULL peut introduire des comportements inattendus, en particulier lors du filtrage des données.

Le cas de NULL dans IN

La requête suivante exclut les lignes où la colonne Erreur est soit « Timeout » ou « Erreur de connexion » :

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

Cependant, cette requête n'inclut pas les lignes où l'erreur est NULL. En effet, l'opérateur IN est évalué à NULL lors de la comparaison d'une valeur à NULL. Par conséquent, l'expression « Error not in (« Timeout », « Connection Error ») » est fausse pour les lignes avec des valeurs NULL.

Solutions de contournement pour la gestion des NULL

Pour récupérer des résultats corrects lorsqu'il s'agit de valeurs NULL, il existe plusieurs approches :

1. Utilisez COALESCE() pour utiliser par défaut une chaîne vide

COALESCE(Error,'') not in ('Timeout','Connection Error')
Copier après la connexion

2. Utilisez OR pour tester NULL et l'inégalité de valeur

Error IS NULL OR Error not in ('Timeout','Connection Error')
Copier après la connexion

3. Utilisez CASE pour émuler l'évaluation booléenne

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

Sensibilité à la casse et performances

OR ne court-circuite pas, ce qui signifie qu'il évaluera les deux expressions même si le le premier est faux. CASE, en revanche, peut arrêter l'évaluation si la première condition est remplie. Cela conduit à de meilleures performances lorsqu'il existe de nombreuses valeurs NULL potentielles.

Exemple de comparaison nulle

Pour illustrer le comportement de NULL dans les expressions IN, considérez le tableau suivant :

msg description
hi greet
NULL nothing

L'expression :

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

renverra uniquement la ligne avec 'salut'. En effet, msg est NULL pour l'autre ligne, ce qui entraîne une comparaison indéterminée.

En conclusion, le mot-clé IN de MySQL peut renvoyer NULL lors de la comparaison avec des valeurs NULL, ce qui entraîne des résultats de filtrage inattendus. Pour résoudre ce problème, utilisez l'une des solutions de contournement décrites ci-dessus pour garantir une récupération précise des données.

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