如何计算SQL中的几个关系
我有一个表结构,简化后看起来像这样如何计算SQL中的几个关系,sql,firebird,Sql,Firebird,我有一个表结构,简化后看起来像这样 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; 我的问题是,
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语句。可能吗
提前感谢。这应该可以做到,即使是在奇怪的家谱中(例如父母是兄弟):
请参阅(没有可用的Firebird引擎,但此代码符合SQL标准)。谢谢,伙计。我真的应该学习如何使用JOIN命令哦,等等,我现在在哪里检查特定的gp.id?在末尾添加where子句?或者就在第一个内部联接之前?将其添加到GROUP BY子句之前。
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