【问题标题】:Count (*) not working with where clause计数 (*) 不适用于 where 子句
【发布时间】:2012-02-03 10:41:59
【问题描述】:

我正在尝试编写的一个相当基本的查询存在问题。

select count (p_id) as mycustomer from person where date_active = null;

这不起作用。 (运行,但返回 0)但是,下面的语句确实(并返回一个数字),有人可以帮忙吗?

select count (p_id) as mycustomer from person wher date_active > '1-MAY-09';

我正在尝试查找表中具有 date_active 为空的 p_id 总数。 (它们确实存在,我可以看到它们!) 谢谢

【问题讨论】:

  • null 在 SQL 中从不等于 null。我们还需要对此提出另一个问题吗?
  • 抱歉,我对这些东西相当生疏,搜索类似的问题也没有帮助。 :(

标签: sql count where


【解决方案1】:

我认为你需要使用:

select count (p_id) as mycustomer from person where date_active is null;

【讨论】:

    【解决方案2】:

    试试下面的

    select count (p_id) as mycustomer from person where date_active is null;
    

    = null 不正确,不会做你想做的事。这个link 提供了更多细节

    【讨论】:

      【解决方案3】:

      您必须使用is 运算符来查找null:

      select count (p_id) as mycustomer from person where date_active is null;
      

      NULL 不是一个值(它表示没有值),因此您不能将 =、!=、 等标量运算符与 NULL 结合使用。

      【讨论】:

        【解决方案4】:

        这应该可行:

        select count (p_id) as mycustomer from person where date_active IS null;
        

        【讨论】:

          【解决方案5】:
          select count (p_id) as mycustomer from person where date_active IS null;
          

          (注意 IS NULL 运算符而不是 =)

          【讨论】:

            【解决方案6】:

            SQL 不适用于二进制逻辑(仅限 truefalse)。它适用于(至少)三元逻辑(truefalsenull)。第三个值使逻辑条件的评估变得复杂(例如条件中的=)。
            基本上,任何涉及 null 的表达式都将返回一个 null 值,并且由于 null 永远不是 true,因此查询不会返回任何行,就像你写的一样

            select count (p_id) as mycustomer from person where 1 = 2
            

            为了解决这个问题,有一些特殊的语法结构,最常见的是is nullis not null 条件。因此,正如其他答案指出的那样,要获取您需要编写的空值

            select count (p_id) as mycustomer from person where date_active is null
            

            关于空值的有趣之处在于它们既不等于也不等于其他空值。

            select * from person where null=null
            

            select * from person where null!=null
            

            两者都不会返回任何行。

            【讨论】:

            • “任何涉及空值的表达式,都将返回空值”——某些表达式可能评估为 UNKNOWN(细微差别):有例外,例如IS NULL 运算符仅计算为 TRUE 或 FALSE。 UNKNOWN 是三值逻辑中的逻辑值,而 null 是值的占位符。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-10-14
            • 2014-08-14
            • 2013-01-06
            • 1970-01-01
            相关资源
            最近更新 更多