Mysql sql在未找到任何记录时显示0

Mysql sql在未找到任何记录时显示0,mysql,sql,Mysql,Sql,当找不到特定id的记录时,我试图显示零。 这幅图像代表了我想要实现的目标。现在我只得到他至少找到一条记录的行(3、4和5) 谁能告诉我我做错了什么。以下是我的尝试(众多尝试之一): 编辑: 编辑: 这就是我得到的结果: 我认为您不需要使用CASE,也可以使用RIGHT join,因此如果join中没有匹配项,那么结果也会出现。试试下面,它应该可以工作 SELECT recipes.fk_recipe_status, COUNT(projectrecipes.fk_projectrecipes

当找不到特定id的记录时,我试图显示零。

这幅图像代表了我想要实现的目标。现在我只得到他至少找到一条记录的行(3、4和5)

谁能告诉我我做错了什么。以下是我的尝试(众多尝试之一):

编辑: 编辑: 这就是我得到的结果:

我认为您不需要使用CASE,也可以使用RIGHT join,因此如果join中没有匹配项,那么结果也会出现。试试下面,它应该可以工作

SELECT  recipes.fk_recipe_status, COUNT(projectrecipes.fk_projectrecipes_projectid)
FROM projectrecipes
RIGHT JOIN recipes
ON projectrecipes.fk_projectrecipes_recipeid = recipes.id
WHERE projectrecipes.fk_projectrecipes_projectid = 213
GROUP BY recipes.fk_recipe_status
试试这个:

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

我认为,加入和地点也应该改变。因此,我采用Paul回答并修改:

SELECT  recipes.fk_recipe_status, COUNT(projectrecipes.fk_projectrecipes_projectid)
把桌子联合起来

FROM recipes
LEFT JOIN projectrecipes
ON projectrecipes.fk_projectrecipes_recipeid = recipes.id

GROUP BY recipes.fk_recipe_status
添加一个have而不是where

HAVING projectrecipes.fk_projectrecipes_projectid = 213
   OR COUNT(projectrecipes.fk_projectrecipes_projectid) = 0
对于某些配方(示例中的1和2),在projectrecipes中找不到任何数据。因此,如果您首先从projectrecipes中选择,则不会从recipes中获取所有数据


由于projectrecipes可能不包含结果中的数据,projectrecipes.fk_projectrecipes_projectid=213将始终为false。如果未找到任何数据,请检查是否未找到任何数据,例如计数=0。

您希望每个状态有一行,因此请从状态选择。然后,您需要按状态统计来自recipes和projectrecipes的记录,所以请将它们连接起来。将条件放在ON子句中,而不是WHERE子句中,因为当没有匹配的记录时,fk_projectrecipes_projectid将为空。(通过在where子句中使用外部联接列,可以将外部联接转换为内部联接。)


他正在使用recipes.fk_recipe_状态。如果执行左联接,则对于未找到的记录,该值将为空。不是吗?如果遗漏了什么,请告诉我?@APaul:编辑了我的答案。尝试了两种方法(左连接和右连接)。它们都返回了与我相同的结果(仅id为3、4和5)@NathalieDeHertogh:您能在表中显示一些示例数据吗。找到正确的查询可能非常有帮助。@NathalieDeHertogh:如果我使用这个查询,你能在中创建一个模板吗。我正在获取projectrecipes中的所有记录(ID1500,ID21234,…)。但在键入此评论时,我找到了解决方案。我用我的律师代替了伯爵,现在我得到了答案。谢谢!你救了我的命。啊,是的,愚蠢的我。当然,您得到的食谱不在项目213中。很抱歉我很高兴,尽管我犯了错误,你还是找到了解决办法。
FROM recipes
LEFT JOIN projectrecipes
ON projectrecipes.fk_projectrecipes_recipeid = recipes.id

GROUP BY recipes.fk_recipe_status
HAVING projectrecipes.fk_projectrecipes_projectid = 213
   OR COUNT(projectrecipes.fk_projectrecipes_projectid) = 0
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;