[英]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.