MySQL:为什么在MySQL中忽略NULL?

时间:2012-10-19 03:16:20

标签: mysql sql database relational-database

我有一个表,其中包含列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>

4 个答案:

答案 0 :(得分:2)

因为NULL未知,unknown并不意味着它不等于CB

如果要返回空值,请在查询中添加条件( IS NULL ),

SELECT ...
FROM   ...
where field_value != 'CB' OR field_value IS NULL

答案 1 :(得分:2)

那是因为与NULL的任何比较也会产生NULL(即不是真或假)。

特殊运算符IS NULLIS NOT NULL用于对NULL进行有用的比较。

您的查询应该是:

... WHERE field_value!='CB' OR field_value IS NULL;

另请参阅:Working with NULL values

答案 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表示“缺少未知值”

Check this page