|
不太容易
我只能做到
with tmp as(
select 1 rn,'a1'l,'a4'r from dual union all
select 2,'a1','a3' from dual union all
select 3,'a4','a2' from dual union all
select 4,'a3','a6' from dual union all
select 5,'a4','a1' from dual union all
select 6,'a4','a8' from dual union all
select 7,'a10','a5' from dual union all
select 8,'a5','a9' from dual
),
t1 as(
select max(sys_connect_by_path(l,' '))s,l
from (select r,l from tmp union select l,r from tmp)
connect by nocycle prior l=r
group by l
order by 1
)
select s,l from t1;
SQL> with tmp as(
2 select 1 rn,'a1'l,'a4'r from dual union all
3 select 2,'a1','a3' from dual union all
4 select 3,'a4','a2' from dual union all
5 select 4,'a3','a6' from dual union all
6 select 5,'a4','a1' from dual union all
7 select 6,'a4','a8' from dual union all
8 select 7,'a10','a5' from dual union all
9 select 8,'a5','a9' from dual
10 ),
11 t1 as(
12 select max(sys_connect_by_path(l,' '))s,l
13 from (select r,l from tmp union select l,r from tmp)
14 connect by nocycle prior l=r
15 group by l
16 order by 1
17 )
18 select s,l from t1;
S L
------------------------------ ---
a8 a8
a8 a4 a4
a8 a4 a1 a1
a8 a4 a1 a3 a3
a8 a4 a1 a3 a6 a6
a8 a4 a2 a2
a9 a9
a9 a5 a5
a9 a5 a10 a10
9 rows selected. |
|