Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie behandelt man NULL-Werte im IN-Schlüsselwort von MySQL für eine genaue Filterung?

Barbara Streisand
Freigeben: 2024-10-23 16:09:02
Original
336 Leute haben es durchsucht

How to Handle NULL Values in MySQL's IN Keyword for Accurate Filtering?

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')
Nach dem Login kopieren

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')
Nach dem Login kopieren

2. Verwenden Sie ODER, um auf NULL und Wertungleichheit zu testen

Error IS NULL OR Error not in ('Timeout','Connection Error')
Nach dem Login kopieren

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
Nach dem Login kopieren

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')
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!