Comme vous exécutez Oracle 11g (et s'il s'agit de la version 2), comme l'une des méthodes, vous pouvez utiliser une expression de table commune récursive (également connue sous le nom de factorisation de sous-requête récursive) pour obtenir le résultat souhaité .
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