Les valeurs NULL dans la clause where
j'ai une table "bla", comme ceci:
[id] [name] [fk]
1 test 4
2 foo 5
3 bar NULL
si je ne la requête sql
SELECT * FROM bla WHERE fk <> 4
je ne reçois le dossier avec l'id 2. je n'ai pas le dossier avec l'id 3 où fk est null.
J'ai pensé à NULL != 4. Semble que c'est faux.
Pourquoi est-ce donc?
OriginalL'auteur caspermc | 2011-07-26
Vous devez vous connecter pour publier un commentaire.
NULL
ne se compare pas égal à rien. Vous aurez besoin pour accepter les valeurs null explicitement:Voir Travailler avec NULL pour plus d'informations sur
NULL
de manutention.OriginalL'auteur Mat
Parce que
NULL
signifieUNKNOWN
, et quand vous comparer une valeur avecUNKNOWN
, le résultat sera toujours faux.Prendre un coup d'oeil à cette comparaison -
Si vous souhaitez récupérer les enregistrements contenant des
NULL
, vous avez besoin de ré-écrire votre requête de cette façon -Pour plus d'informations, voir Wikipédia.
OriginalL'auteur MD Sayem Ahmed
NULL
est spécial en ce qu'il représente un "inconnu" de la valeur. Cela ne peut pas être comparé à des nombres (ou toute autre valeur), donc le résultat -Est
NULL
<> 4? La réponse est - ne sait pas. Est 4 différents, à partir d'une valeur inconnue?Essayez plutôt ceci:
OriginalL'auteur Oded
NULL n'est pas une valeur, mais plutôt l'inconnu absence de valeur. Si vous souhaitez tester la valeur NULL, vous devez le faire de manière explicite en utilisant
IS NULL
etIS NOT NULL
. Par exemple, NULL, test FAUX même contre NULL lui-même. Donc, travailler avec NULL est fait uniquement avec les fonctions mentionnées ci-dessus (etISNULL()
). Votre requête peut être réécrit commeOriginalL'auteur Naltharial
Comment sur
Logique:
OriginalL'auteur AlexanderMP
Déclaration suivante devrait vous aider:
SÉLECTIONNEZ * à PARTIR de bla OÙ FUSIONNENT(fk,0) <> 4
OriginalL'auteur Srikanth Kattam