2011-02-08 16 views
1

DB2 SQLで私は3列:parent_id,id、およびcountを含むテーブルを持っています。これは階層テーブルです。すべてのリーフノードとその合計カウントを取得するための再帰的クエリと、すべてのリーフノードとその合計カウントに各ノードのコストを加えたクエリ(別のテーブル(id,price)に格納された価格)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) 

これはあなたにすべての葉ノードを取得し、必要な情報を得るためにカウントと結合を追加するだけです。

希望に役立ちます!

関連する問題