子查询返回null

时间:2016-12-17 21:36:25

标签: mysql sql

我尝试用mysql执行以下查询(应该添加更多条件,但为问题简化了,所以子查询有时会返回null,有时会返回值,这只是为了使问题的查询更短):

SELECT COUNT(*)
FROM table
WHERE date = (SELECT MAX(date) FROM table)

我的问题是,如果子查询返回null,我的结果将为0,这不是所需的结果。 由于我不能IS而不是=,我想知道是否有一个简单的解决方案。

4 个答案:

答案 0 :(得分:4)

MySQL提供NULL安全等式比较 <=> (太空飞船)操作符。

我怀疑如果将 = 等式比较运算符替换为NULL安全等式比较运算符,查询将返回它看起来像你所追求的结果。

这个表达式:

  a <=> b

基本上是简写等同于:

  a = b OR ( a IS NULL AND b IS NULL )

答案 1 :(得分:0)

要计算所有具有空日期的行,这应该有效:

SELECT COUNT(*) FROM table WHERE date IS NULL;

答案 2 :(得分:0)

这不应该是一个问题。

如果没有行或者所有行中的date都为NULL,则子查询仅返回NULL。

在这种情况下,查询将返回0。这对我来说很有意义。你想要它返回什么?

答案 3 :(得分:0)

您可以将两个结果组合在一起并计算最大值:

SELECT MAX(datecount) FROM
(SELECT COUNT(*) AS datecount FROM table WHERE date IS NULL 
UNION ALL
SELECT COUNT(*) AS datecount FROM table WHERE date = (SELECT MAX(date) FROM table)) AS derivedtable