Mam kwerendę rekursywną, która naprawdę rozciąga granice wiedzy SQL małp Java. Teraz, kiedy nadszedł czas ostateczny o 1:30, nadszedł czas, aby zacząć szukać pomocy. To jeden z niewielu przypadków, gdy Google mnie zawiódł.Jak odzyskać wszystkie rekurencyjne dzieci z wiersza nadrzędnego w Oracle SQL?
tabela wygląda następująco:
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
Próbuję uzyskać następujący wynik, gdzie rodzic ma każde dziecko wymienione poniżej nich. Zauważ, że kaskada qty również.
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
Próbowałem kilku odchyleń poniższych bezskutecznie.
SELECT *
FROM MD_BOMS
START WITH PARENT_ID is not null
CONNECT BY PRIOR CHILD_ID = PARENT_ID
ORDER BY PARENT_ID, CHILD_ID
Używam bazy danych Oracle. Wszelkie sugestie, pomysły itp. Byłyby mile widziane. Wydaje się być blisko, ale nie jestem pewien, czy to jest to, czego szukam: Retrieve all Children and their Children, recursive SQL
Na podstawie (Retrieve all Children and their Children, recursive SQL) Próbowałem również następujące, ale otrzymałem "niedozwolone odniesienie nazwy zapytania w klauzula WITH" błąd :
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
Nie rozumiem, jak Ilość musi być obliczona. Proszę wytłumacz. –
Witam Olaf. Ta konkretna struktura modeluje zestawienie materiałowe (BOM). Jest to sposób opisywania, jakie komponenty składają się na inne komponenty. Krótko mówiąc, komponenty qtys są multiplikatywne. Na przykład, jeśli w 25 jest 2 27, to w 25 to 4 31. Patrząc wstecz, zrobiłem literówkę w moim oryginalnym poście. Powinno być tylko 1 30 w 25. –