当找不到该特定ID的记录时,我尝试显示零。


该图像代表了我要实现的目标。现在,我只获得他至少发现一条记录的行(即3、4和5)。

有人可以告诉我我在做什么错。这是我的尝试(众多尝试之一):

编辑:

SELECT  statusses.statusses_namenl,
        IFNULL(COUNT(projectrecipes.fk_projectrecipes_projectid),0) AS CntRows
FROM recipes
RIGHT JOIN projectrecipes
ON projectrecipes.fk_projectrecipes_recipeid = recipes.id
LEFT JOIN statusses
ON recipes.fk_recipe_status = statusses.id
WHERE projectrecipes.fk_projectrecipes_projectid = 213
GROUP BY recipes.fk_recipe_status


编辑:

这是我得到的结果:

最佳答案

您希望每个状态一行,因此请从状态中选择。然后,您想按状态对配方和项目配方中的记录进行计数,因此可以将它们外部联接。将您的条件放在ON子句中,而不是WHERE子句中,因为没有匹配的记录时,fk_projectrecipes_projectid将为NULL。 (通过在where子句中使用外部联接的列,可以将外部联接转换为内部联接。)

select s.statusses_namenl, count(*)
from statusses
left join recipes r on r.fk_recipe_status = s.id
left join projectrecipes pr on pr.fk_projectrecipes_recipeid = r.id and pr.fk_projectrecipes_projectid = 213
group by s.statusses_namenl;

10-07 14:06
查看更多