计算层次结构中每个节点的所有子节点和 sub-childs
Counting all childs and sub-childs of each node in a hierarchy
我有这样的表层次结构:
Table A
|
| Table B
|
| Table C
|
| Table D
对于 Table A
中的给定行,假设带有 ID=1
的行,我想获得此输出:
ID | childB | ChildC | childD
-------------------------------
1 | x | x | x
其中childB
是Table B
中children的个数,ChildC
是[=30的Table C
中的children =] 在 Table B
...等
中找到
我想通过一个 sql 查询获得此输出。现在我只能使用此查询获得 Table B
中 children 的计数:
SELECT a.ID, (SELECT
COUNT(b.parentID)
FROM TableB AS b
WHERE b.parentID= a.ID)
AS childB
FROM TableA a
WHERE a.ID =1
如果您想要它用于特定 ID(如您提到的,例如 ID=1
),您可以 left join
它们都在 idparent
和 id
上并使用 count(distinct)
:
select a.ID,
count(distinct b.id) childB,
count(distinct c.id) childC,
count(distinct d.id) childD
from tableA a
left join tableB b on b.parentID = a.ID
left join tableC c on c.parentID = b.ID
left join tableD d on d.parentID = c.ID
where a.ID=1
group by a.ID;
这里是fiddleDEMO.
我有这样的表层次结构:
Table A
|
| Table B
|
| Table C
|
| Table D
对于 Table A
中的给定行,假设带有 ID=1
的行,我想获得此输出:
ID | childB | ChildC | childD
-------------------------------
1 | x | x | x
其中childB
是Table B
中children的个数,ChildC
是[=30的Table C
中的children =] 在 Table B
...等
我想通过一个 sql 查询获得此输出。现在我只能使用此查询获得 Table B
中 children 的计数:
SELECT a.ID, (SELECT
COUNT(b.parentID)
FROM TableB AS b
WHERE b.parentID= a.ID)
AS childB
FROM TableA a
WHERE a.ID =1
如果您想要它用于特定 ID(如您提到的,例如 ID=1
),您可以 left join
它们都在 idparent
和 id
上并使用 count(distinct)
:
select a.ID,
count(distinct b.id) childB,
count(distinct c.id) childC,
count(distinct d.id) childD
from tableA a
left join tableB b on b.parentID = a.ID
left join tableC c on c.parentID = b.ID
left join tableD d on d.parentID = c.ID
where a.ID=1
group by a.ID;
这里是fiddleDEMO.