NULL-Behandlung im IN-Schlüsselwort von MySQL verstehen
Das IN-Schlüsselwort von MySQL gibt ein boolesches Ergebnis zurück, aber es ist wichtig zu beachten, dass dies nicht immer der Fall ist Gibt 1 (wahr) oder 0 (falsch) zurück. Der Sonderfall NULL kann zu unerwartetem Verhalten führen, insbesondere beim Filtern von Daten.
Der Fall von NULL in IN
Die folgende Abfrage schließt Zeilen aus, in denen die Fehlerspalte entweder ist „Timeout“ oder „Verbindungsfehler“:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error')
Diese Abfrage umfasst jedoch keine Zeilen, in denen Error NULL ist. Dies liegt daran, dass der IN-Operator beim Vergleich eines Werts mit NULL NULL ergibt. Daher ist der Ausdruck „Error not in ('Timeout','Connection Error')“ für Zeilen mit NULL-Werten falsch.
Problemumgehungen für die NULL-Behandlung
Um korrekte Ergebnisse beim Umgang mit NULL-Werten zu erhalten, gibt es mehrere Ansätze:
1. Verwenden Sie COALESCE(), um standardmäßig eine leere Zeichenfolge zu verwenden
COALESCE(Error,'') not in ('Timeout','Connection Error')
2. Verwenden Sie ODER, um auf NULL und Wertungleichheit zu testen
Error IS NULL OR Error not in ('Timeout','Connection Error')
3. Verwenden Sie CASE, um die boolesche Auswertung zu emulieren
CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1
Groß-/Kleinschreibung und Leistung
OR schließt nicht kurz, was bedeutet, dass beide Ausdrücke ausgewertet werden, selbst wenn die Das erste ist falsch. CASE hingegen kann die Auswertung stoppen, wenn die erste Bedingung erfüllt ist. Dies führt zu einer besseren Leistung, wenn viele potenzielle NULL-Werte vorhanden sind.
Null-Vergleichsbeispiel
Um das Verhalten von NULL in IN-Ausdrücken zu veranschaulichen, betrachten Sie die folgende Tabelle:
msg | description |
---|---|
hi | greet |
NULL | nothing |
Der Ausdruck:
select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner')
gibt nur die Zeile mit „hi“ zurück. Dies liegt daran, dass msg für die andere Zeile NULL ist, was zu einem unbestimmten Vergleich führt.
Zusammenfassend lässt sich sagen, dass das IN-Schlüsselwort von MySQL beim Vergleich mit NULL-Werten möglicherweise NULL zurückgibt, was zu unerwarteten Ergebnissen beim Filtern führt. Um dieses Problem zu beheben, verwenden Sie eine der oben beschriebenen Problemumgehungen, um einen genauen Datenabruf sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie behandelt man NULL-Werte im IN-Schlüsselwort von MySQL für eine genaue Filterung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!