所以我有这个查询
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时,我无法弄清楚如何让它返回行。
真诚地感谢您的帮助。非常感谢。
答案 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中满足这种需求
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