Maison  >  Article  >  base de données  >  Opérateur MySQL IN et valeurs nulles : pourquoi les lignes avec des erreurs nulles sont-elles exclues ?

Opérateur MySQL IN et valeurs nulles : pourquoi les lignes avec des erreurs nulles sont-elles exclues ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-23 17:43:02733parcourir

MySQL IN Operator and Null Values: Why Are Rows with Null Errors Excluded?

Opérateur MySQL IN et valeurs nulles

Dans MySQL, l'opérateur IN est utilisé pour vérifier si une valeur donnée correspond à une valeur dans un délai spécifié liste. Cependant, lors de l'utilisation de l'opérateur IN avec des valeurs nulles, un comportement inattendu peut se produire.

Pourquoi les valeurs NULL sont exclues

L'opérateur MySQL IN renvoie un résultat booléen (TRUE ou FAUX). Lorsque l’on compare une valeur non nulle à null, le résultat est toujours FAUX. Par conséquent, lorsque vous utilisez IN pour vérifier si une valeur n'est égale à aucune valeur dans une liste incluant null, toutes les lignes avec des valeurs nulles sont exclues du résultat.

Résoudre le problème

Pour inclure des valeurs nulles dans le résultat, les options suivantes peuvent être utilisées :

  1. Fonction COALESCE : La fonction COALESCE peut remplacer les valeurs nulles par une valeur par défaut spécifiée . Grâce à cette fonction, la requête peut être modifiée en :
Error = COALESCE(Error, '') NOT IN ('Timeout','Connection Error');
  1. Opérateur OU : L'opérateur OU peut être utilisé pour vérifier à la fois la présence d'un code d'erreur et l'absence de valeur d'erreur nulle. Par conséquent, la requête peut être réécrite comme :
Error IS NULL OR Error NOT IN ('Timeout','Connection Error');
  1. Instruction CASE : L'instruction CASE peut être utilisée pour évaluer plusieurs conditions et renvoyer une valeur spécifique basée sur le résultat. Dans ce cas, il peut être utilisé pour créer une expression booléenne qui renvoie TRUE pour les lignes contenant des erreurs non nulles. La requête peut être modifiée en :
CASE WHEN Error IS NULL THEN 1
ELSE Error NOT IN ('Timeout','Connection Error') THEN 1
END = 1
  1. Sous-requête JOIN : Une sous-requête JOIN peut être utilisée pour récupérer des données de plusieurs tables et combiner les résultats en fonction d'un état courant. Cette méthode peut garantir que les lignes avec des erreurs nulles ne sont pas exclues :
SELECT t1.*
FROM Table1 t1
LEFT JOIN (
    SELECT Error
    FROM ErrorTable
    WHERE Error IN ('Timeout')
) t2 ON t1.Error = t2.Error;

Conclusion

Lors de l'utilisation de l'opérateur IN avec des valeurs nulles, il est important pour comprendre que l'opérateur traite null comme une valeur spéciale. Pour inclure des valeurs nulles dans le résultat, des conditions ou techniques supplémentaires, telles que celles mentionnées ci-dessus, doivent être utilisé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