У меня есть рекурсивный запрос, который действительно растягивает пределы знаний SQL-маркера Java. Теперь, когда в AM, наконец, 1:30, наверно пора начать искать какую-то помощь. Это один из немногих раз, когда Google меня подвел.Как получить все рекурсивные дочерние элементы родительской строки в Oracle SQL?
таблица выглядит следующим образом:
Parent_ID CHILD_ID QTY
25 26 1
25 27 2
26 28 1
26 29 1
26 30 2
27 31 1
27 32 1
27 33 2
Я пытаюсь получить следующий результат, когда родитель имеет каждый ребенок, перечисленных ниже них. Обратите внимание, что каскад qty также.
BASE PARENT_ID CHILD_ID QTY
25 25 26 1
25 25 27 2
25 26 28 1
25 26 29 1
25 26 30 1
25 27 31 2
25 27 32 2
25 27 33 4
26 26 28 1
26 26 29 1
26 26 30 2
27 27 31 1
27 27 32 1
27 27 33 2
Я пробовал несколько отклонений от следующего безрезультатно.
SELECT *
FROM MD_BOMS
START WITH PARENT_ID is not null
CONNECT BY PRIOR CHILD_ID = PARENT_ID
ORDER BY PARENT_ID, CHILD_ID
Я использую базу данных Oracle. Любые предложения, идеи и т. Д. Получили бы большую оценку. Это кажется близким, но я не уверен, что это то, что я ищу: Retrieve all Children and their Children, recursive SQL
На основании (Retrieve all Children and their Children, recursive SQL) Я также пробовал следующее, но получаю «незаконную ссылку на имя запроса в WITH clause» error :
with cte as (
select CHILD_ID, PARENT_ID, CHILD_ID as head
from MD_BOMS
where PARENT_ID is not null
union all
select ch.CHILD_ID, ch.PARENT_ID, p.head
from MD_BOMS ch
join cte pa
on pa.CHILD_ID = ch.PARENT_ID
)
select *
from cte
Я не понимаю, как кол-во должно быть вычислено. Пожалуйста, объясни. –
Привет, Олаф. Эта конкретная структура моделирует спецификацию (BOM). Это способ описания компонентов, составляющих другие компоненты. Короче говоря, компоненты qtys мультипликативны. Например, если в 25 есть 2 27, тогда в 25 будет 4 31. Оглядываясь назад, я сделал опечатку в своем оригинальном посте. Там должно быть только 1 30 в 25. –