我有三张桌子,一张,两张和三张。
一
二
三
有了这个查询
select one.id, count(two.id) as num_twos, count(three.id) as num_threes from one
left join two on one.id = two.one_id
left join three on one.id = three.one_id
group by one.id
我希望得到
1 2 1
2 1 4
3 0 0
4 0 0
因为有
- 二分之二的记录与 one_id 1 相关,三分之二的记录与 one_id 1 相关。
- 与 one_id 2 相关的二分之一记录和与 one_id 2 相关的三分之四记录。
但我明白了
为什么?计数似乎成倍增加。我可以在没有子查询的情况下获得所需的行为吗?
图像这个:
输出:
然后加入主表(这样,表一中的主记录不重复,也不需要 distinct ):
输出:(使用 isnull - 放置 0 而不是 NULL)
同样的事情,与表 3
来自评论:这样,您不需要顶级 group by ,因为所有信息已经汇总在
() as Two
and() as Three
或不同的:
输出 :
来源:
此外,您可以将其重写为: