Pourquoi cette requête renvoie-t-elle 0 ligne?MySQL mystery: La valeur nulle n'est pas différente de la chaîne non nulle
select t.f1, t.f2
from (select null f1, 'a' f2 from dual) t
where t.f1<>t.f2;
Ceci est une version distillée d'une requête complexe que j'ai. Je veux comparer deux tables contenant des données liées un-à-un et je veux sélectionner les lignes qui contiennent des valeurs différentes pour certains champs. Mais il peut aussi y avoir le cas où une ligne manque dans l'une des tables. Le LEFT JOIN renvoie correctement des valeurs null pour ces lignes, mais la clause WHERE filtre incorrectement (ou de manière inattendue) ces lignes. Pourquoi dans ce cas-ci, 'null' n'est PAS DIFFERENT à une valeur non nulle (comme 'a')?
Pourquoi?
Ce qui me rend fou est que ce
select t.f1, t.f2
from (select null f1, 'a' f2 from dual) t;
retourne 1 ligne (comme je m'y attendais), mais cette
select t.f1, t.f2
from (select null f1, 'a' f2 from dual) t
where t.f1=t.f2;
renvoie 0 lignes !! Donc, null n'est pas égal à 'a' et null n'est pas différent de 'a' !!
S'il vous plaît ... Quelqu'un peut-il expliquer cela?
Merci à tous ... oui J'avais déjà résolu mon problème pratique en ajoutant des conditions IS NULL à la clause WHERE. Cependant, j'ai été surpris que ni 'a'
tato
Je sais exactement ce que vous voulez dire, c'est une astuce logique sanglante dans le travail avec SQL. :) Même après des années de travaux SQL, je dois toujours faire le changement supplémentaire dans mon cerveau pour permettre les valeurs nulles. –