繁体   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