Как получить листовые узлы по рекурсивному запросу в db2? - PullRequest
1 голос
/ 08 февраля 2011

В DB2 SQL у меня есть таблица, которая содержит 3 столбца: parent_id, id и count.Это иерархическая таблица.Мне нужен рекурсивный запрос, чтобы получить все конечные узлы и их общее количество, и другой запрос, чтобы получить все конечные узлы и их общее количество плюс стоимость каждого узла (цена хранится в другой таблице (id, 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 ;

Это дает мне листовые узлы и другие.Я попробовал это для второй части:

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 Ответ

1 голос
/ 08 февраля 2011

Если вы просто пытаетесь получить конечные узлы, вам не нужно делать рекурсивный запрос - вы можете просто проверить наличие дочерних элементов:

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

Это даст вам все конечные узлы, а затем нужно просто добавить число и объединить, чтобы получить необходимую информацию.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...