Maison  >  Article  >  base de données  >  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
Barbara Streisandoriginal
2024-10-23 16:09:02337parcourir

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')

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')

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

Error IS NULL OR Error not in ('Timeout','Connection Error')

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

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')

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!

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