首頁 > 資料庫 > mysql教程 > 為什麼 NULL 值會導致 SQL 的 NOT IN 子句出現意外結果?

為什麼 NULL 值會導致 SQL 的 NOT IN 子句出現意外結果?

Mary-Kate Olsen
發布: 2025-01-23 12:31:09
原創
865 人瀏覽過

Why Do NULL Values Cause Unexpected Results with SQL's NOT IN Clause?

了解 SQL 中 NULL 值和 NOT IN 子句的意外行為

NULL 值與 NOT IN 運算子互動時,SQL 查詢通常會產生令人驚訝的結果。 當將 NOT IN 查詢與使用 LEFT JOIN.

的等效查詢進行比較時,這種差異變得很明顯

考慮這些問題:

<code class="language-sql">A: select 'true' where 3 in (1, 2, 3, null)
B: select 'true' where 3 not in (1, 2, null)</code>
登入後複製

查詢 A 傳回結果,而查詢 B 則不傳回結果。 根本原因在於不同的 SQL 資料庫如何處理 NULL 值。

啟用 ANSI_NULLS(許多系統(如 SQL Server 2005)中的預設設定),任何涉及 NULL 的比較(例如 3 = NULL)都會計算為 UNKNOWN。這種不確定性源自於NULL.

固有的不確定性

在查詢 B 中,NOT IN 運算子在子查詢中遇到 NULL,從而產生 UNKNOWN 計算。 由於沒有其他值匹配,整個謂詞變成 UNKNOWN,產生空結果集。

相反,停用ANSI_NULLS會改變行為。 當 ANSI_NULLS 關閉時,3 = NULL 的計算結果為 TRUE。 SQL 將 NULL 解釋為可能等於一切,包括它本身。 因此,查詢 B 的謂詞計算結果為 TRUE,傳回結果。

簡而言之,不一致的結果源自於對 NULL 設定確定的 ANSI_NULLS 值的不同處理。 當 ANSI_NULLS 啟用時,與 NULL 的比較會產生 UNKNOWN,導致在使用 NOT INNULL 值的查詢中出現意外結果。 這凸顯了理解 NULL SQL 處理以獲得準確查詢結果的重要性。

以上是為什麼 NULL 值會導致 SQL 的 NOT IN 子句出現意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板