Maison > base de données > tutoriel mysql > Comment les valeurs NULL affectent-elles le résultat d'une clause NOT IN ?

Comment les valeurs NULL affectent-elles le résultat d'une clause NOT IN ?

DDD
Libérer: 2025-01-23 12:47:10
original
500 Les gens l'ont consulté

How Do NULL Values Affect the Outcome of a NOT IN Clause?

Comprendre les valeurs NULL et la clause NOT IN

Des incohérences surviennent souvent lors de l'utilisation de clauses NOT IN par rapport à des LEFT JOIN, en particulier lorsqu'il s'agit de valeurs NULL. Examinons cela avec deux exemples de requêtes :

Requête A :

SELECT 'true' WHERE 3 IN (1, 2, 3, NULL);
Copier après la connexion

Requête B :

SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);
Copier après la connexion

La requête A produit un résultat, contrairement à la requête B. Cette différence provient de la façon dont SQL gère les comparaisons impliquant des NULL valeurs.

Disséquer les requêtes

Décomposons chaque requête pour comprendre le comportement :

Requête A :

Cette requête peut être simplifiée en :

SELECT 'true' WHERE 3 = 1 OR 3 = 2 OR 3 = 3 OR 3 = NULL;
Copier après la connexion

Étant donné que 3 = 3 est évalué à TRUE, la requête renvoie un résultat.

Requête B :

Cette requête se simplifie en :

SELECT 'true' WHERE 3 != 1 AND 3 != 2 AND 3 != NULL;
Copier après la connexion

Avec ANSI_NULLS activé (valeur par défaut dans la plupart des bases de données SQL), 3 != NULL est évalué à UNKNOWN. Une condition AND avec UNKNOWN fait que le prédicat entier est UNKNOWN, ce qui entraîne le retour d'aucune ligne.

Si ANSI_NULLS est désactivé, 3 != NULL est évalué à TRUE, renvoyant potentiellement une ligne.

Conclusion

La présence de valeurs NULL dans une clause NOT IN a un impact significatif sur les résultats de la requête en raison de la logique à trois valeurs de SQL (VRAI, FAUX, INCONNU) et du paramètre ANSI_NULLS. Il est crucial d'être conscient de ce comportement lorsque vous travaillez avec des valeurs NULL pour éviter des résultats inattendus. L'utilisation des vérifications LEFT JOIN et IS NULL fournit souvent une alternative plus fiable pour gérer les valeurs NULL dans de tels scénarios.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal