जैसा कि आप Oracle 11g चला रहे हैं (और यदि यह रिलीज़ 2 होता है), एक विधि के रूप में, आप पुनरावर्ती सामान्य तालिका अभिव्यक्ति (जिसे पुनरावर्ती उप-क्वेरी फैक्टरिंग के रूप में भी जाना जाता है) का उपयोग कर सकते हैं वांछित परिणाम प्राप्त करने के लिए ।
SQL> with rcte(r1, r2, lv, root) as(
2 select r1
3 , r2
4 , 0 lv
5 , r1
6 from rd
7 where r1 = 1
8
9 union all
10
11 select t.r1
12 , t.r2
13 , lv + 1
14 , q.root
15 from rd t
16 join rcte q
17 on (t.r1 = q.r2)
18 )
19 search depth first by r1 set s
20 cycle r1 set is_cycle to 'y' default 'n'
21
22 select root
23 , r2
24 from rcte
25 where is_cycle = 'n'
26 and r2 <> root
27 ;
ROOT R2
---------- ----------
1 2
1 3
1 4
1 5