Heim  >  Artikel  >  Datenbank  >  Wie behandelt das IN-Schlüsselwort von MYSQL NULL-Werte in Vergleichen?

Wie behandelt das IN-Schlüsselwort von MYSQL NULL-Werte in Vergleichen?

Linda Hamilton
Linda HamiltonOriginal
2024-10-23 21:43:30308Durchsuche

How Does MYSQL's IN Keyword Handle NULL Values in Comparisons?

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!

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