MYSQL IN 關鍵字對 NULL 值的處理
SQL 查詢通常使用 IN 關鍵字根據一組指定值來過濾結果。然而,在處理 NULL 值時,MYSQL 的 IN 關鍵字表現出一種需要考慮的獨特行為。
問題:IN 關鍵字排除NULL 值
考慮以下查詢:
select count(*) from Table1 where CurrentDateTime>='2012-05-28 15:34:02.403504' and Error not in ('Timeout','Connection Error');
此查詢旨在排除錯誤值為“超時”或「連接錯誤」的行,但它意外地忽略了錯誤為NULL 的行。要考慮 NULL 值,必須新增附加條件(OR Error is NULL)。
排除 NULL 的原因
IN 關鍵字使用布林值比較表達式 ( 1/0)。但是,在某些情況下,它可以傳回 NULL 而不是布林值。當 Error 為 NULL 時,IN 表達式變為:
Error <> 'Timeout' AND Error <> 'Connection Error'
此處套用空比較規則。由於 Error 的值為 NULL,因此表達式無法計算為 true 或 false。
包含NULL 值的解決方案
要包含具有NULL 值的行,可以使用以下解決方案:
與IN 合併:
COALESCE(Error,'') not in ('Timeout','Connection Error');
OR 條件與IS NULL :
Error IS NULL OR Error not in ('Timeout','Connection Error');
CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1
create table tbl(msg varchar(100) null, description varchar(100) not null); insert into tbl values('hi', 'greet'), (null, 'nothing');短路的CASE 表達式:
select 'hulk' as x, msg, description from tbl where msg not in ('bruce','banner');
範例範例考慮以下資料:查詢:將只傳回“hi”,因為NOT IN 表達式的計算結果為NULL對於具有NULL 訊息值的行。 結論MYSQL 中的 IN 關鍵字在比較過程中將 NULL 值視為特殊情況。使用 IN 的開發人員必須意識到這種行為並實施適當的處理,以避免排除或誤解具有 NULL 值的行。
以上是MYSQL 的 IN 關鍵字如何處理比較中的 NULL 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!