Ich habe ein Problem, bei dem beim Versuch, die Zeilen auszuwählen, die für eine bestimmte Spalte einen NULL-Wert haben, eine leere Menge zurückgegeben wird. Wenn ich mir jedoch die Tabelle in phpMyAdmin ansehe, heißt es für die meisten Zeilen null.
Meine Anfrage sieht ungefähr so aus:
SELECT pid FROM planets WHERE userid = NULL
Leeres Set jedes Mal.
Viele Stellen sollen sicherstellen, dass es nicht als "NULL" oder "null" anstelle eines tatsächlichen Werts gespeichert wird, und man soll versuchen, nur nach einem Leerzeichen ( userid = ' '
) zu suchen, aber keines davon hat funktioniert. Es gab einen Vorschlag, MyISAM nicht zu verwenden und innoDB zu verwenden, da MyISAM Probleme beim Speichern von Null hat. Ich habe die Tabelle auf innoDB umgestellt, aber jetzt habe ich das Gefühl, dass das Problem möglicherweise darin besteht, dass sie aufgrund der Art und Weise, wie sie konvertiert wird, immer noch nicht null ist. Ich würde dies gerne tun, ohne die Tabelle als innoDB oder irgendetwas anderes neu erstellen zu müssen, aber wenn ich muss, kann ich das auf jeden Fall versuchen.
Antworten:
SQL NULL ist etwas Besonderes, und Sie müssen es tun
WHERE field IS NULL
, da NULL mit nichts gleich sein kann.einschließlich sich selbst (dh: NULL = NULL ist immer falsch).Siehe
Rule 3
https://en.wikipedia.org/wiki/Codd%27s_12_rulesquelle
select * from foo where bar <> "abc"
werden keine Zeilen zurückgegeben, in denen der Balken null ist. Das warf mich heute für eine Schleife. Die Dokumente nennen<>
den Operator "ungleich", aber in Wirklichkeit ist es der Operator "ist gleich etwas anderem als".quelle
Da alle Antworten erhalten, möchte ich noch etwas hinzufügen. Ich hatte auch das gleiche Problem konfrontiert.
Warum ist Ihre Abfrage fehlgeschlagen? Du hast,
Dies gibt Ihnen nicht das erwartete Ergebnis, da aus MySQL-Dokument
Hervorhebung von mir.
Lösung
NULL
Verwenden Sie zum Testen die OperatorenIS NULL
undIS NOT NULL
.NULL
.NULL
.quelle
Es gibt auch einen
<=>
Operator:Würde funktionieren. Das Schöne ist, dass
<=>
es auch mit Nicht-NULL-Werten verwendet werden kann:SELECT NULL <=> NULL
ergibt1
.SELECT 42 <=> 42
ergibt1
auch.Siehe hier: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
quelle
Infos von http://w3schools.com/sql/sql_null_values.asp :
Also im Falle Ihres Problems:
quelle
Hatte das gleiche Problem bei der Abfrage:
gab keine Werte zurück. Es scheint ein Problem mit MyISAM zu sein, und dieselbe Abfrage der Daten in InnoDB ergab die erwarteten Ergebnisse.
Ging mit:
Alle erwarteten Ergebnisse zurückgegeben.
quelle
quelle
Ich hatte das gleiche Problem beim Konvertieren von Datenbanken von Access nach MySQL (Verwenden von vb.net für die Kommunikation mit der Datenbank).
Ich musste beurteilen, ob ein Feld (Feldtyp varchar (1)) null war.
Diese Aussage hat für mein Szenario funktioniert:
quelle