MySQL IN-Schlüsselwort und NULL-Werte
Das IN-Schlüsselwort in MySQL führt einen Vergleich zwischen einem gegebenen Ausdruck und einer Liste von Werten durch und gibt einen zurück boolesches Ergebnis (WAHR/FALSCH). In bestimmten Szenarien behandelt MySQL jedoch NULL-Werte auf unterschiedliche Weise.
Betrachten 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 zielt darauf ab, Zeilen aus Tabelle1 abzurufen, deren CurrentDateTime-Wert größer als ist „2012-05-28 15:34:02.403504“ und ein Fehlerwert, der nicht gleich „Timeout“ oder „Verbindungsfehler“ ist. Überraschenderweise schließt diese Abfrage Zeilen mit NULL-Werten für Fehler aus.
Warum ignoriert MySQL NULL-Werte in IN-Ausdrücken?
MySQL behandelt NULL als unbekannten oder undefinierten Wert. Bei Verwendung in einem IN-Ausdruck wertet MySQL NULL weder als TRUE noch als FALSE aus, was zu einem unbekannten Ergebnis führt. Daher ergibt der IN-Ausdruck selbst NULL.
Beheben der Abfrage
Um auch Zeilen mit NULL-Fehlerwerten abzurufen, gibt es mehrere Ansätze:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 ELSE 0 END = 1;
Diese Änderungen stellen sicher, dass Zeilen mit NULL-Fehlerwerten in den Abfrageergebnissen enthalten sind.
Das obige ist der detaillierte Inhalt vonWie geht MySQL mit NULL-Werten in IN-Ausdrücken um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!