如何通过db2中的递归查询获取叶节点?

时间:2011-02-08 06:11:53

标签: sql db2

在DB2 SQL中,我有一个包含3列的表:parent_ididcount。它是一个层次表。我需要一个递归查询来获取所有叶节点及其总计数,另一个查询获取所有叶节点及其总计数加上每个节点的成本(存储在另一个表中的价格id,{{ 1}}))

我尝试了这个查询,但它不起作用:

price

它给了我叶子节点和其他。我在第二部分尝试了这个:

 with COMP_P (COMPONENT,SUBCOMPONENT,SUBCOMPCOUNT) as (
(select C.COMPONENT,C.SUBCOMPONENT,C.SUBCOMPCOUNT from COMPS C WHERE C.COMPONENT = 'A')
UNION ALL 
(SELECT P.COMPONENT,C.SUBCOMPONENT,C.SUBCOMPCOUNT * P.SUBCOMPCOUNT from COMPS C,COMP_P P WHERE P.SUBCOMPONENT = C.COMPONENT ))
SELECT COMPONENT,SUBCOMPONENT,sum(SUBCOMPCOUNT) As Count FROM COMP_P group by COMPONENT,SUBCOMPONENT ;

1 个答案:

答案 0 :(得分:1)

如果您只是想获取叶子节点,则不需要进行递归查询 - 您只需检查是否存在子节点:

SELECT * FROM table AS t1 WHERE NOT EXISTS (SELECT * FROM table AS t2 WHERE t2.parent_id = t1.id)

这将为您提供所有叶子节点,然后只需添加计数和连接即可获得所需的信息。

希望有所帮助!