我有一个表结构,简化后看起来像这样。
grandparents
id
name
parents
id
grandparent_id
name
children
id
parent_id
name
我知道,我可以算一下父母的孩子数量:
select
name,
( select count (*) from children c where c.parent_id = p.id ) as count
from p parents;
我的问题是,我如何计算与祖父母有关的孩子数量。表结构无法更改,我想要一个SELECT语句。这可能吗?
提前致谢。
答案 0 :(得分:2)
这应该可以解决问题,即使在奇怪的家谱中(例如父母是兄弟):
SELECT gp.id,
gp.name,
COUNT(DISTINCT c.id)
FROM grandparents gp
INNER JOIN parents p
ON p.grandparent_id = gp.id
INNER JOIN children c
ON c.parent_id = p.id
GROUP BY gp.id,
gp.name
请参阅fiddle(没有可用的Firebird引擎,但此代码符合SQL标准)。