Behandlung von NULL-Werten durch das MYSQL-IN-Schlüsselwort
SQL-Abfragen verwenden häufig das Schlüsselwort IN, um Ergebnisse basierend auf einer Reihe angegebener Werte zu filtern. Beim Umgang mit NULL-Werten zeigt das IN-Schlüsselwort von MYSQL jedoch ein einzigartiges Verhalten, das berücksichtigt werden muss.
Problem: IN-Schlüsselwort schließt NULL-Werte aus
Bedenken Sie die folgende Abfrage:
select count(*) from Table1 where CurrentDateTime>='2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
Diese Abfrage soll Zeilen mit den Fehlerwerten „Timeout“ oder „Verbindungsfehler“ ausschließen, lässt jedoch unerwartet Zeilen aus, bei denen der Fehler NULL ist. Um NULL-Werte zu berücksichtigen, muss eine zusätzliche Bedingung (OR-Fehler ist NULL) hinzugefügt werden.
Grund für den NULL-Ausschluss
Das Schlüsselwort IN vergleicht Ausdrücke mit booleschen Werten ( 1/0). In einigen Fällen kann es jedoch NULL anstelle von booleschen Werten zurückgeben. Wenn Error NULL ist, wird der IN-Ausdruck zu:
Error <> 'Timeout' AND Error <> 'Connection Error'
Hier gelten Nullvergleichsregeln. Da der Wert von Error NULL ist, kann der Ausdruck weder als wahr noch als falsch ausgewertet werden.
Lösungen zum Einschließen von NULL-Werten
Um Zeilen mit NULL-Werten einzuschließen, ist dies möglich Verwenden Sie die folgenden Lösungen:
COALESCE mit IN:
COALESCE(Error,'') not in ('Timeout','Connection Error');
OR-Bedingung mit IS NULL :
Error IS NULL OR Error not in ('Timeout','Connection Error');
CASE-Ausdruck mit Kurzschluss:
CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1
Beispiel
Berücksichtigen Sie die folgenden Daten:
create table tbl(msg varchar(100) null, description varchar(100) not null); insert into tbl values('hi', 'greet'), (null, 'nothing');
Die Abfrage:
select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner');
Gibt nur „hi“ zurück, da der NOT IN-Ausdruck als NULL ausgewertet wird für die Zeile mit dem NULL-Nachrichtenwert.
Schlussfolgerung
Das IN-Schlüsselwort in MYSQL behandelt NULL-Werte bei Vergleichen als Sonderfall. Entwickler, die IN verwenden, müssen sich dieses Verhaltens bewusst sein und eine entsprechende Behandlung implementieren, um den Ausschluss oder die Fehlinterpretation von Zeilen mit NULL-Werten zu vermeiden.
Das obige ist der detaillierte Inhalt vonWie behandelt das IN-Schlüsselwort von MYSQL NULL-Werte in Vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!