SELECT COUNT为空时返回0

时间:2015-03-13 12:26:01

标签: mysql sql

所以我有这个查询

SELECT m.id, m.name, m.description, m.directions, COUNT(j.markerid) as marker_jingles
    FROM markers AS m
    LEFT OUTER JOIN jingles AS j
    ON j.markerid=m.id
    WHERE 1

但我有点卡住,因为当COUNT为0时,我无法弄清楚如何让它返回行。

真诚地感谢您的帮助。非常感谢。

4 个答案:

答案 0 :(得分:2)

您想在查询中使用group by吗?

SELECT m.id, m.name, m.description, m.directions, COUNT(j.markerid) as marker_jingles
FROM markers AS m LEFT OUTER JOIN
     jingles AS j
     ON j.markerid=m.id
WHERE 1
GROUP BY m.id;

您的原始查询应始终返回一行,并在连接后返回所有匹配项的计数。 count()值不应该是NULL - 除非您使用的是旧版本的MySQL。

答案 1 :(得分:1)

大多数dbms平台独立方法是使用COALESCE()

SELECT
      m.id
    , m.name
    , m.description
    , m.directions
    , COALESCE( COUNT(j.markerid), 0) as marker_jingles
FROM markers AS m
LEFT OUTER JOIN jingles AS j ON j.markerid = m.id
WHERE 1 = 1
GROUP BY m.id, m.name, m.description, m.directions

否则,IFNULL()可以在MySQL中满足这种需求


  • MS SQL Server的ISNULL()或COALESCE()
  • 适用于Oracle的NVL()或COALESCE()

COALESCE()是真正的朋友:)

答案 2 :(得分:0)

你的朋友是IFNULL

IFNULL(expr1,expr2)

来自文档:

  

如果expr1不为NULL,则IFNULL()返回expr1;否则它会返回   表达式2。 IFNULL()返回一个数字或字符串值,具体取决于   使用它的上下文。

答案 3 :(得分:-1)

此处不需要左连接,只需执行相关的子查询即可获得计数:

SELECT 
    m.id, m.name, m.description, m.directions,
    (select COUNT(*) 
     from jingles j
     where m.id = j.markerid) as marker_jingles
FROM markers AS m
WHERE 1