Heim > Datenbank > MySQL-Tutorial > Wie gehe ich mit NULL-Werten mit dem Schlüsselwort IN in MySQL-Abfragen um?

Wie gehe ich mit NULL-Werten mit dem Schlüsselwort IN in MySQL-Abfragen um?

Patricia Arquette
Freigeben: 2024-10-24 05:45:02
Original
770 Leute haben es durchsucht

How to Handle NULL Values with IN Keyword in MySQL Queries?

MySQL-IN-Schlüsselwort schließt NULL-Werte aus

Bei Verwendung des IN-Schlüsselworts in einer MySQL-Abfrage zum Filtern von Zeilen basierend auf bestimmten Werten kann es zu unerwarteten Ergebnissen kommen treten beim Arbeiten mit NULL-Werten auf. In diesem Artikel wird der Grund für dieses Verhalten untersucht und Methoden zur korrekten Verarbeitung von NULL-Werten in solchen Szenarios bereitgestellt.

Die von Ihnen erwähnte 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

schließt überraschenderweise Zeilen aus, in denen die Fehlerspalte NULL-Werte enthält . Dies liegt daran, dass das Schlüsselwort IN semantisch äquivalent ist zu:

Error <> 'TimeOut' AND Error <> 'Connection Error'
Nach dem Login kopieren

Aufgrund der Eigenschaften von NULL-Werten kann der obige Ausdruck nicht als wahr ausgewertet werden. NULL-Werte sind mit keinem anderen Wert gleich, auch nicht mit sich selbst. Daher werden Zeilen mit NULL-Werten in der Fehlerspalte herausgefiltert.

Um NULL-Werte in die Ergebnismenge aufzunehmen, können Sie die Abfrage wie folgt anpassen:

  • COALESCE (Fehler,'') nicht in ('Timeout','Verbindungsfehler'): Dies ersetzt NULL-Werte in der Fehlerspalte durch eine leere Zeichenfolge, bevor sie verglichen werden.
  • Fehler IST NULL ODER Fehler nicht vorhanden ('Timeout', 'Verbindungsfehler'): Dies prüft explizit sowohl auf NULL-Werte als auch auf nicht übereinstimmende Werte.
  • CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1: Dies verwendet eine CASE-Anweisung, um sowohl NULL als auch übereinstimmende Werte in 1 umzuwandeln, was dann auf Gleichheit mit 1 überprüft wird.

Ein Beispiel:

create table tbl (msg varchar(100) null, description varchar(100) not null);

insert into tbl values ('hi', 'greet'), (null, 'nothing');

select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner');
Nach dem Login kopieren

Diese Abfrage gibt nur die Zeile zurück, in der msg „hi“ ist, da NULL-Werte aufgrund ihrer Unbestimmtheit ausgeschlossen sind.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit NULL-Werten mit dem Schlüsselwort IN in MySQL-Abfragen 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