【发布时间】:2019-04-12 14:18:57
【问题描述】:
场景:我有一个包含重复数据的表。该表的一列是 ddate,如果它为空/null,我想选择该行(并删除它)。但由于某种原因,我无法通过直接查询找到空行。
问题:当我运行以下查询 (1):
select
`ddate`,
count(1) as `nb`
from instrument_nt
group by `ddate`;
我得到了 ddate 为 NULL 并且它具有其他值的行数。但是当我运行查询(2)时:
select count(*) from instrument_nt where `ddate` = Null;
或
select * from instrument_nt where `ddate` = NULL;
我的查询结果为 0 或为空。
问题:这两个查询(1 和 2)有什么区别?如何正确删除日期为空/缺失的数据?
【问题讨论】:
-
你应该这样做
select * from instrument_nt where `ddate` IS NULL; -
NULL 什么都不匹配,甚至连 NULL = NULL 都不匹配。
-
ddate = NULL永远不会是 TRUE。任何与 NULL 的比较总是评估为 NULL。您必须使用IS运算符。