计算层次结构中每个节点的所有子节点和子子节点

时间:2015-03-28 21:27:13

标签: mysql sql count hierarchy

我有这种表格层次结构:

 Table A
 |
 | Table B
   |
   | Table C
     |
     | Table D

对于Table A中的给定行,让我们说ID=1行,我想获得此输出:

ID  |  childB | ChildC | childD
-------------------------------
1   |    x    |   x    | x          

其中childBTable B中的子女数量,ChildCTable C中找到的子女Table B中的子女...等

我想通过一个sql查询获得此输出。现在我只能使用此查询获得Table B中孩子的计数:

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

1 个答案:

答案 0 :(得分:1)

如果您希望将其用于特定ID(例如ID=1提到的那样),您可以在left joinidparentid使用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; }:

{{1}}

这是一个小提琴DEMO