Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mystère MySQL :la valeur nulle n'est pas différente de la chaîne non nulle

Exactement. NULL représente une valeur inconnue, pas une valeur spécifique (ce n'est pas la même chose que NULL en C, ou nil en Ruby, etc.) En SQL, si vous comparez quelque chose à la valeur inconnue, le résultat est également inconnu. Et vous n'obtiendrez pas les lignes où WHERE l'état est inconnu.

Essayez ceci :

SELECT NULL <> 2;

et vous verrez NULL en conséquence.

Essayez ceci :

SELECT * FROM t WHERE NULL;

et aucune ligne ne sortira, même si la table t est énorme.

Si vous avez vraiment besoin de ce que vous avez dit vouloir (et je ne le préconise pas), vous pouvez faire quelque chose comme ceci :

SELECT T.f1, T.f2
FROM (SELECT NULL f1, 'a' f2) T
WHERE ((T.f1 IS NULL OR T.f2 IS NULL)
    AND (T.f1 IS NOT NULL OR T.f2 IS NOT NULL))
    OR T.f1 <> T.f2