首頁  >  文章  >  資料庫  >  MYSQL 的 IN 關鍵字如何處理比較中的 NULL 值?

MYSQL 的 IN 關鍵字如何處理比較中的 NULL 值?

Linda Hamilton
Linda Hamilton原創
2024-10-23 21:43:30311瀏覽

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

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn