簡體   English   中英

如果字段為空,為什么SQL“NOT IN('val1')”不返回?

[英]Why doesn't SQL “NOT IN ('val1')” return if the field is null?

我有一個像這樣的查詢:

Select *
FROM table1
WHERE field1 NOT IN ('value1')

如果行的field1null ,則不會返回。 它對我來說看起來不合邏輯,因為null不是'value1',所以應返回該行,這可能會導致許多錯誤。 我明白,由於某些原因,它的工作方式如此。 這些是什么?

在SQL中, NULL不是值。

SELECT NULL = NULL
# => NULL
SELECT NULL != NULL
# => NULL

從而,

原因null不是'value1'

NULL 也不是 'value1'。 NULL基本上就是說“我不知道”的SQL方式。 所以它可能是'value1',或者它可能不是。 測試NULL

SELECT NULL IS NULL;
# => 1

因此,試試這個:

WHERE field1 NOT IN ('value1') OR field1 IS NULL

專門處理此案。

null不是一個值 - 它缺乏價值。 將其視為缺失數據。 每當它參與一個對值(例如in )起作用的邏輯運算符時,它的結果就是“未知” - “問題:以下值是缺失值嗎?答案:我不知道”。

由於“未知”不正確,因此不評估該行。 如果要處理null必須明確地執行此操作,例如,使用in運算符:

SELECT *
FROM   table1
WHERE  field1 IS NULL OR field1 NOT IN ('value1')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM