【问题标题】:MySQL How to find Null data in a tableMySQL如何在表中查找Null数据
【发布时间】: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 运算符。

标签: mysql sql null


【解决方案1】:

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

(2)

select * from instrument_nt where `ddate` IS NULL;

你会得到一个ddate为NULL的结果集;

【讨论】:

  • 正确,我不知道。我会接受的。
【解决方案2】:

每个null定义与其他null 不同。因此,等于null 始终是false。例如,参见here,它描述了这个所谓的“三值问题”。

对于这第三类值,您想使用IS,如IS NULLIS NOT NULL

【讨论】:

    【解决方案3】:

    使用关键字IS NULL检查表中的空值

    例如:

    select * from instrument_nt where `ddate` IS NULL;
    

    【讨论】:

      【解决方案4】:

      MySQL 空值检查使用 IS 运算符而不是 =

      您的查询应如下所示:select * from instrument_nt whereddateIS NULL;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 2022-07-25
        • 2014-01-19
        • 2012-12-26
        相关资源
        最近更新 更多