如果字段为空,为什么SQL"NOT IN('val1')"不返回?

Ups*_*n42 2 mysql sql null select

我有一个像这样的查询:

Select *
FROM table1
WHERE field1 NOT IN ('value1')
Run Code Online (Sandbox Code Playgroud)

如果该field1行是null,则不会返回.它对我来说看起来不合逻辑,因为null它不是'value1',所以应返回该行,这可能会导致许多错误.我明白,由于某些原因,它的工作方式如此.这些是什么?

Ama*_*dan 6

NULL在SQL中,A 不是值.

SELECT NULL = NULL
# => NULL
SELECT NULL != NULL
# => NULL
Run Code Online (Sandbox Code Playgroud)

从而,

原因null不是'value1'

NULL也不是没有 "VALUE1".NULL基本上是说"我不知道"的SQL方式.所以它可能是'value1',或者它可能不是.测试的方法NULL

SELECT NULL IS NULL;
# => 1
Run Code Online (Sandbox Code Playgroud)

因此,试试这个:

WHERE field1 NOT IN ('value1') OR field1 IS NULL
Run Code Online (Sandbox Code Playgroud)

专门处理此案.