sql >> Databáze >  >> RDS >> Mysql

MySQL záhada:Hodnota Null se neliší od nenulového řetězce

Přesně tak. NULL představuje neznámou hodnotu, nikoli žádnou konkrétní hodnotu (není to totéž jako NULL v C nebo nil v Ruby atd.) V SQL, pokud něco porovnáte s neznámou hodnotou, výsledek je také neznámý. A nedostanete řádky kde WHERE stav je neznámý.

Zkuste toto:

SELECT NULL <> 2;

a uvidíte NULL jako výsledek.

Zkuste toto:

SELECT * FROM t WHERE NULL;

a nevyjdou žádné řádky, i když tabulka t je obrovský.

Pokud opravdu potřebujete to, co jste řekli, že chcete (a já to neobhajuji), můžete udělat něco takového:

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


  1. Připojte se ke čtyřem stolům zahrnujícím LEFT JOIN bez duplikátů

  2. Aktivní relace a stav SQL serveru

  3. Jak funguje něco OR DIE() v PHP?

  4. Pozor na to, na co se díváte