首頁  >  文章  >  資料庫  >  MySQL IN 運算子和 Null 值:為什麼要排除具有 Null 錯誤的行?

MySQL IN 運算子和 Null 值:為什麼要排除具有 Null 錯誤的行?

Patricia Arquette
Patricia Arquette原創
2024-10-23 17:43:02733瀏覽

MySQL IN Operator and Null Values: Why Are Rows with Null Errors Excluded?

MySQL IN 運算子和空值

在MySQL 中,IN 運算子用於檢查給定值是否與指定範圍內的任何值匹配列表。但是,當使用帶有 null 值的 IN 運算子時,可能會發生意外行為。

為什麼排除 NULL 值

MySQL IN 運算子回傳一個布林結果(TRUE 或錯誤的)。將非空值與 null 進行比較時,結果始終為 FALSE。因此,當使用 IN 檢查某個值是否不等於清單中包含 null 的任何值時,所有具有 null 值的行都會從結果中排除。

修復問題

要在結果中包含空值,可以使用以下選項:

  1. COALESCE 函數: COALESCE 函數可以用指定的預設值來取代空值。使用此函數,查詢可以修改為:
Error = COALESCE(Error, '') NOT IN ('Timeout','Connection Error');
  1. OR 運算子: OR 運算子可用於檢查是否有特定的錯誤程式碼且不存在空錯誤值。因此,查詢可以重寫為:
Error IS NULL OR Error NOT IN ('Timeout','Connection Error');
  1. CASE 語句: CASE 語句可用於評估多個條件並根據條件傳回特定值結果。在這種情況下,它可用於建立布林表達式,該表達式對於具有非空錯誤的行傳回 TRUE。查詢可以修改為:
CASE WHEN Error IS NULL THEN 1
ELSE Error NOT IN ('Timeout','Connection Error') THEN 1
END = 1
  1. JOIN 子查詢: JOIN 子查詢可用於從多個表中檢索數據,並根據常見情況。此方法可以確保不排除存在null 錯誤的行:
SELECT t1.*
FROM Table1 t1
LEFT JOIN (
    SELECT Error
    FROM ErrorTable
    WHERE Error IN ('Timeout')
) t2 ON t1.Error = t2.Error;

結論

當對null 值使用IN 運算子時,這一點很算重要了解該運算子將null 視為特殊值。要在結果中包含空值,必須採用額外的條件或技術,例如上面提到的那些。

以上是MySQL IN 運算子和 Null 值:為什麼要排除具有 Null 錯誤的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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