我有这样一个查询:
Select *
FROM table1
WHERE field1 NOT IN ('value1')
如果该行的field1
为null
,则不返回。
这对我来说看起来不合逻辑,因为 null
不是“value1”,所以应该返回该行,这会导致很多错误。
我知道由于某些原因它是这样工作的。它们是什么?
最佳答案
NULL
在 SQL 中不是一个值。
SELECT NULL = NULL
# => NULL
SELECT NULL != NULL
# => NULL
因此,
cause null is not 'value1'
但NULL
也不是不是“value1”。 NULL
基本上是 SQL 表达“我不知道”的方式。所以它可能是“value1”,也可能不是。测试 NULL
的方法是
SELECT NULL IS NULL;
# => 1
因此,试试这个:
WHERE field1 NOT IN ('value1') OR field1 IS NULL
专门解决这个问题。
关于mysql - 如果字段为空,为什么 SQL "NOT IN (' val 1')"不返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34737906/