Akhirnya saya menemukan solusi yang mirip seperti ini:
SELECT child FROM child_parent START WITH parent =
(
SELECT DISTINCT parent FROM
(
SELECT parent
FROM child_parent
WHERE CONNECT_BY_ISLEAF = 1
START WITH child = 5
CONNECT BY PRIOR parent = child
UNION
SELECT parent
FROM child_parent
WHERE parent = 5
)
)
CONNECT BY NOCYCLE PRIOR child = parent
UNION
SELECT DISTINCT parent FROM
(
SELECT parent
FROM child_parent
WHERE CONNECT_BY_ISLEAF = 1
START WITH child = 5
CONNECT BY PRIOR parent = child
UNION
SELECT parent
FROM child_parent
WHERE parent = 5
);
Ini bekerja dengan semua node untuk contoh yang diberikan. Tetapi jika salah satu daun memiliki induk kedua dan titik awal berada di atas node ini atau di cabang yang berbeda, itu tidak berfungsi.
Tapi bagi saya itu sudah cukup.
Solusi untuk mendapatkan semua node dalam grafik dapat berupa:menerapkan kebalikan dari kueri di atas (dari atas ke bawah) dan kemudian menjalankannya (bawah ke atas, atas ke bawah) sebaliknya sampai Anda tidak menemukan lagi node baru. Ini akan membutuhkan PL/SQL dan saya juga tidak tahu tentang kinerjanya.