Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Geheimnis:Nullwert unterscheidet sich nicht von Nicht-Null-String

Genau. NULL stellt einen unbekannten Wert dar, keinen bestimmten Wert (er ist nicht dasselbe wie NULL in C oder nil in Ruby usw.) Wenn Sie in SQL etwas mit dem unbekannten Wert vergleichen, ist das Ergebnis ebenfalls unbekannt. Und Sie erhalten nicht die Zeilen, in denen WHERE steht Zustand ist unbekannt.

Versuchen Sie Folgendes:

SELECT NULL <> 2;

und Sie werden NULL sehen als Ergebnis.

Versuchen Sie Folgendes:

SELECT * FROM t WHERE NULL;

und es werden keine Zeilen ausgegeben, auch wenn die Tabelle t ist riesig.

Wenn Sie wirklich brauchen, was Sie sagten, dass Sie es wollten (und ich befürworte das nicht), können Sie so etwas tun:

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