gpt4 book ai didi

mysql - 返回外部查询的所有结果并获取附加项的计数

转载 作者:可可西里 更新时间:2023-11-01 07:57:57 25 4
gpt4 key购买 nike

所以我正在努力编写一个查询,无论我应用了什么过滤器,它都会返回所有类别,但计数会根据此过滤器中返回的食谱数量而变化。

如果我不对它应用任何过滤器,这个查询就很好用。计数似乎是正确的,但一旦我添加如下内容:where c.parent_id is not null and r.time_cook_minutes > 60 我过滤掉了大部分类别,而不是仅仅计算零。

这是我想出的一个示例查询,它没有按照我想要的方式工作:

select t.id, t.name, t.parent_id, a.cntr from categories as t,
(select c.id, count(*) as cntr from categories as c
inner join recipe_categories as rc on rc.category_id = c.id
inner join recipes as r on r.id = rc.recipe_id
where c.parent_id is not null and r.time_cook_minutes > 60
group by c.id) as a
where a.id = t.id
group by t.id

因此,正如您可能想象的那样,目前仅返回此过滤器子集中存在的食谱计数...我想要的是获取所有这些食谱,而不管过滤器的计数是否为 0(如果它们不存在)在该过滤器下有任何食谱。

如有任何帮助,我们将不胜感激。如果这个问题不是很清楚,请告诉我,我可以详细说明。

最佳答案

如果将条件移动到常规外部连接中,则不需要嵌套连接:

select t.id, t.name, t.parent_id, count(r.id)
from categories as t
left join recipe_categories as rc on rc.category_id = c.id
left join recipes as r on r.id = rc.recipe_id
and r.time_cook_minutes > 60
where c.parent_id is not null
group by 1, 2, 3

注意事项:

  • 使用 left 连接,这样您总能得到每个类别
  • r.time_cook_minutes > 60 放在 left join 条件上。将它留在 where 子句中会取消 left
  • 的效果

关于mysql - 返回外部查询的所有结果并获取附加项的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50662372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com