我有两张桌子。称他们为罐子和饼干。一个cookie有一个jar,一个jar有零个或多个cookie。 Cookie表有一个cookies.jar_id字段供参考。
我想要的是所有有饼干的罐子的列表(不包括没有饼干的罐子),每个罐子中的饼干数量。
可能有数百万个罐子和数百万个cookie,因此这对性能非常敏感。并且99%的罐子没有饼干,而那些有饼干的人可能有数百个,所以我真的需要排除空罐子而不是为每个饼干返回一行。
我确信这可以通过加入以某种方式完成,但我很难过。
答案 0 :(得分:5)
您实际上只需查询'cookies'表:
Select jar_id, count(*) as NumberOfCookies
From cookies
Where jar_id is not null
Group by jar_id
答案 1 :(得分:4)
select jars.jar_id, count(*)
from jars
inner join cookies
on cookies.jar_id = jars.jar_id
group by jars.jar_id
cookies.jar_id上应该有一个索引。甚至更好的是从cookies.jar_id到jars.jar_id
的外键如果要将jars表中的其他列添加到结果中,请使用Max()聚合函数:
select jars.jar_id, Max(jars.jar_name), count(*)
from jars
inner join cookies
on cookies.jar_id = jars.jar_id
group by jars.jar_id