计算层次结构中每个节点的所有子节点和 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          

其中childBTable 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 它们都在 idparentid 上并使用 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.