MySQL IN 關鍵字排除NULL 值
在MySQL 查詢中使用IN 關鍵字根據特定值過濾行時,可能會出現意外結果使用NULL 值時會發生這種情況。本文調查了這種行為背後的原因,並提供了在這種情況下正確處理 NULL 值的方法。
您提到的查詢:
select count(*) from Table1 where CurrentDateTime>'2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
令人驚訝的是排除了 Error 欄位包含 NULL 值的行。這是因為 IN 關鍵字在語意上等同於:
Error <> 'TimeOut' AND Error <> 'Connection Error'
由於 NULL 值的屬性,上述表達式無法計算為 true。 NULL 值不等於任何其他值,包括它們本身。因此,Error 欄位中包含 NULL 值的行將會被篩選掉。
要在結果集中包含NULL 值,您可以如下調整查詢:
範例:
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');
此查詢將只傳回 msg 為「hi」的行,因為 NULL 值因其不確定性而被排除。
以上是如何在 MySQL 查詢中使用 IN 關鍵字處理 NULL 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!