首頁 >資料庫 >mysql教程 >如何在 MySQL 查詢中使用 IN 關鍵字處理 NULL 值?

如何在 MySQL 查詢中使用 IN 關鍵字處理 NULL 值?

Patricia Arquette
Patricia Arquette原創
2024-10-24 05:45:02767瀏覽

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

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 值,您可以如下調整查詢:

  • COALESCE (Error,'') not in ('Timeout','Connection Error'):在比較Error 列中的NULL 值之前,將它們替換為空字串。
  • Error IS NULL OR Error not in ('Timeout','Connection Error'):這會明確檢查 NULL 值和不匹配值。
  • CASE WHEN Error IS NULL THEN 1 ELSE Error not in ('Timeout','Connection Error') THEN 1 END = 1:這使用CASE 語句將NULL 和匹配值轉換為1,然後檢查是否等於1。

範例:

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

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