我有一个表,其中包含列field_value的以下可能值。
但是当我尝试选择所有不是'CB'的值时,查询结果也会忽略所有NULL值。
为什么会这样?
mysql> select distinct field_value from TableName;
+--------------+
| field_value |
+--------------+
| S |
| NULL |
| CA |
| CB |
+--------------+
4 rows in set (6.32 sec)
mysql> select distinct field_value from TableName where field_value!='CB';
+--------------+
| field_value |
+--------------+
| S |
| CA |
+--------------+
2 rows in set (0.15 sec)
mysql>
答案 0 :(得分:2)
因为NULL
未知,unknown
并不意味着它不等于CB
。
如果要返回空值,请在查询中添加条件( IS NULL ),
SELECT ...
FROM ...
where field_value != 'CB' OR field_value IS NULL
答案 1 :(得分:2)
那是因为与NULL
的任何比较也会产生NULL
(即不是真或假)。
特殊运算符IS NULL
和IS NOT NULL
用于对NULL
进行有用的比较。
您的查询应该是:
... WHERE field_value!='CB' OR field_value IS NULL;
答案 2 :(得分:1)
NULL不等于任何值。 NULL不等于任何值。 NULL甚至不等于NULL。如果你不相信,试试吧。
select * from anytable
where NULL = NULL
or not NULL = NULL
or NULL != NULL
or not NULL != NULL
您应该检索零行。所有四个条件的结果都是UNKNOWN。 unknown 与TRUE不同。 unknown 与FALSE不同。如果这听起来像是一团糟,那么你可能已经开始明白了。
最好避免在WHERE条件中使用可为空的列,除非你准备仔细考虑事情。
答案 3 :(得分:0)
实际上,NULL表示“缺少未知值”