अंत में मैं इस तरह के समाधान के साथ आया:
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
);
यह दिए गए उदाहरण के लिए सभी नोड्स के साथ काम करता है। लेकिन अगर लीफ में से एक का दूसरा पैरेंट है और शुरुआती बिंदु इस नोड के ऊपर या किसी अन्य शाखा में है तो यह काम नहीं करता है।
लेकिन मेरे लिए यह काफी अच्छा है।
ग्राफ में सभी नोड्स प्राप्त करने का एक समाधान हो सकता है:उपरोक्त क्वेरी के विपरीत (ऊपर से नीचे तक) लागू करें और फिर उन्हें निष्पादित करें (नीचे से ऊपर, ऊपर से नीचे) इसके विपरीत जब तक आपको कोई और नया नोड न मिले। इसकी आवश्यकता होगी PL/SQL और मुझे भी प्रदर्शन के बारे में पता नहीं है।