Heim  >  Artikel  >  Datenbank  >  Wie geht MySQL mit NULL-Werten in IN-Ausdrücken um?

Wie geht MySQL mit NULL-Werten in IN-Ausdrücken um?

Barbara Streisand
Barbara StreisandOriginal
2024-10-23 18:17:05305Durchsuche

How Does MySQL Handle NULL Values in IN Expressions?

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:

  1. Verwenden Sie COALESCE, um NULL-Werte durch einen Standardwert zu ersetzen:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and COALESCE(Error,'') not in ('Timeout','Connection Error');
  1. Verwenden Sie IS NULL und OR, um explizit nach NULL-Werten zu suchen:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and (Error IS NULL OR Error not in ('Timeout','Connection Error'));
  1. Verwenden Sie CASE, um ein boolesches Ergebnis basierend auf Fehlerwerten zuzuweisen:
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!

Stellungnahme:
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