我有一个像这样的查询:
Select *
FROM table1
WHERE field1 NOT IN ('value1')
如果该行的field1
为null
,则不会返回该行。
它对我来说看起来不合逻辑,因为null
不是'value1',所以应返回该行,这可能会导致许多错误。
我明白,由于某些原因,它的工作方式如此。它们是什么?
答案 0 :(得分:6)
在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
专门处理案件。
答案 1 :(得分:2)
null
不是一个价值 - 它缺乏价值。将其视为缺失数据。每当它参与一个处理值的逻辑运算符(例如in
)时,它的结果就是"未知" - "问题:以下值是一个缺失值?答:我不知道"。
因为"未知"如果不是,则不评估该行。如果您要处理null
,则必须明确地处理in
,例如,使用SELECT *
FROM table1
WHERE field1 IS NULL OR field1 NOT IN ('value1')
运算符:
-module(some_mod).
-compile(export_all).
some_fun() ->
fun f/0.
f() ->
ok.