sql >> Database >  >> RDS >> Mysql

MySQL-mysterie:Null-waarde verschilt niet van niet-null-tekenreeks

Precies. NULL vertegenwoordigt een onbekende waarde, geen specifieke waarde (het is niet hetzelfde als NULL in C, of ​​nil in Ruby, enz.) Als u in SQL iets vergelijkt met de onbekende waarde, is het resultaat ook onbekend. En je krijgt niet de rijen waar WHERE staat is onbekend.

Probeer dit:

SELECT NULL <> 2;

en je ziet NULL als resultaat.

Probeer dit:

SELECT * FROM t WHERE NULL;

en er komen geen rijen uit, zelfs niet als de tabel t is enorm.

Als je echt nodig hebt wat je zei dat je wilde (en ik pleit hier niet voor), kun je zoiets als dit doen:

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. Zend Framework en Mysql - erg traag

  2. ExecuteScalar vs ExecuteNonQuery bij het retourneren van een identiteitswaarde

  3. App werkt niet meer vanwege database

  4. SQL CASE-instructie