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');
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'
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:
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');
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!