2011-02-08 46 views
1

在DB2 SQL中,我有一个包含3列的表:parent_id,idcount。它是一个层次表。我需要一个递归查询来获取所有叶节点和它们的总数,另一个查询获得所有叶节点及其总数加上每个节点的成本(存储在另一个表中的价格(idprice))如何通过db2中的递归查询获取叶节点?

我尝试这样做查询,但没有奏效:

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 ; 

它给我的叶节点等。我想这对于第二部分:

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,sum(SUBCOMPCOUNT) * partcosts.cost FROM COMP_P,partcosts where partcosts.partid.id=COMP_P.SUBCOMPONENT group by COMPONENT,SUBCOMPONENT ; 

回答

1

如果你只是试图让叶节点,你不应该需要做递归查询 - 你可以检查孩子的存在:

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

这会给你所有的叶节点,然后它只是一个添加计数和联接以获取所需信息的问题。

希望有帮助!