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

MySQL-mysterium:Null-værdien er ikke forskellig fra en ikke-null-streng

Nemlig. NULL repræsenterer en ukendt værdi, ikke nogen specifik værdi (det er ikke det samme som NULL i C eller nil i Ruby osv.) Hvis man i SQL sammenligner noget med den ukendte værdi, er resultatet også ukendt. Og du vil ikke få rækkerne hvor WHERE tilstand er ukendt.

Prøv dette:

SELECT NULL <> 2;

og du vil se NULL som resultat.

Prøv dette:

SELECT * FROM t WHERE NULL;

og der kommer ingen rækker ud, selvom tabellen t er enorm.

Hvis du virkelig har brug for det, du sagde, du ville have (og jeg går ikke ind for dette), kan du gøre noget som dette:

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. Træk de første X ord (ikke kun tegn) fra mySQL

  2. Hvad er Azure Data Studio?

  3. Tilslutning af Oracle 21c til SQL Server

  4. Online migrering fra MySQL 5.6 Non-GTID til MySQL 5.7 med GTID