Hvis du vil bruge det som visning, kan du gøre noget som følgende:
WITH rek AS (SELECT item.id
, item.name
, connect_by_root item.id root_id
FROM item
START WITH parent_id IS null
CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
, startItem.name startName
, childItem.id childID
, childItem.name childName
FROM rek startItem
JOIN rek childItem
USING (root_id)
-- WHERE startItem.id = 3 -- This would be done from outside the view
Underforespørgslen rek
forbinder alle søskende af træet med rodelementet. Så skal du kun bruge denne forespørgsel to gange og forbinde den via rodelementet for at få alle elementer, der er forbundet via forældre-barn-relation.
Hvis du vil reducere resultaterne, kan du bruge SYS_CONNECT_BY_PATH
for at gøre det:
WITH rek AS (SELECT item.id
, item.name
, connect_by_root item.id root_id
, SYS_CONNECT_BY_PATH(item.id, '/') path
FROM item
START WITH parent_id IS null
CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
, startItem.name startName
, childItem.id childID
, childItem.name childName
, childItem.path
FROM rek startItem
JOIN rek childItem
ON startItem.root_id = childItem.root_id
AND (startItem.path LIKE childItem.path||'/%'
OR childItem.path LIKE startItem.path||'/%'
OR childItem.id = startItem.id)
Dette vil f.eks. give dig kun dine børns og forældres udgangspunkt og ingen indgange fra andre blade.