Mysql
 sql >> Database >  >> RDS >> Mysql

Mistero MySQL:il valore Null non è diverso dalla stringa non Null

Esattamente. NULL rappresenta un valore sconosciuto, non un valore specifico (non è lo stesso di NULL in C, o nil in Ruby, ecc.) In SQL, se confronti qualcosa con il valore sconosciuto, anche il risultato è sconosciuto. E non otterrai le righe in cui WHERE la condizione è sconosciuta.

Prova questo:

SELECT NULL <> 2;

e vedrai NULL come risultato.

Prova questo:

SELECT * FROM t WHERE NULL;

e nessuna riga uscirà, anche se la tabella t è enorme.

Se hai davvero bisogno di ciò che hai detto di volere (e non lo sto sostenendo), puoi fare qualcosa del genere:

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