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

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

Barbara Streisand
Freigeben: 2024-10-23 18:17:05
Original
428 Leute haben es durchsucht

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

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

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!

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