[英]Why doesn't SQL “NOT IN ('val1')” return if the field is null?
我有一個像這樣的查詢:
Select *
FROM table1
WHERE field1 NOT IN ('value1')
如果行的field1
為null
,則不會返回。 它對我來說看起來不合邏輯,因為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.