场景:我有一个包含重复数据的表。此表的一列是 ddate,如果它是空/空的,我想选择该行(并将其删除(。但是由于某种原因,我无法通过直接查询找到空行。
问题:运行以下查询 (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(之间有什么区别?如何正确删除具有空/缺失日期的数据?
NULL
的意思是不知道它是一个值。
如果你想得到NULL
行,你需要使用IS NULL
而不是eqaul NULL
select count(*) from instrument_nt where `ddate` IS Null;
这两个查询(1 和 2(之间有什么区别?如何正确删除具有空/缺失日期的数据?
(1(
select count(*) from instrument_nt where `ddate` IS Null;
您将从instrument_nt
表中获得ddate
NULL
的金额。
(二(
select * from instrument_nt where `ddate` IS NULL;
您将获得一个ddate
为 NULL 的结果集;
每个null
都被定义为与其他null
不同。因此,对null
的平等总是false
的。例如,请参阅此处,它描述了这种所谓的"三值问题"。
对于这第三类值,您希望使用 IS
,如 IS NULL
或 IS NOT NULL
。
使用关键字 IS NULL
检查表中的空值
例如:
select * from instrument_nt where `ddate` IS NULL;
MySQL 空检查使用 IS
运算符而不是 =
。
您的查询应如下所示:select * from instrument_nt where
日期IS NULL;