0

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

4 回答 4

2

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

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

SELECT ...
FROM   ...
where field_value != 'CB' OR field_value IS NULL
于 2012-10-19T03:18:12.543 回答
2

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

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

因此,您的查询应该是:

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

另请参阅:使用 NULL 值

于 2012-10-19T03:18:35.560 回答
1

NULL 不等于任何值。NULL 不等于任何值。NULL 甚至不等于 NULL。不信就试试。

select * from anytable
where NULL = NULL
or not NULL = NULL
or NULL != NULL
or not NULL != NULL

您应该检索到零行。所有四个条件的结果都是未知的。 未知与 TRUE 不同。 未知与 FALSE 不同。如果这对您来说听起来很乱,那么您可能已经开始理解了。

最好避免在 WHERE 条件下使用可为空的列,除非您准备好仔细考虑。

于 2012-10-21T02:06:21.340 回答
0

实际上 NULL 的意思是“一个缺失的未知值”

检查此页面

于 2012-10-19T03:38:40.093 回答