with a as (
select 'A' beginaddr ,'B' toaddr, 1000 long_km from dual
union
select 'A' ,'C' , 1100 from dual
union
select 'A' ,'D' , 900 from dual
union
select 'A' ,'E' , 400 from dual
union
select 'B' ,'D' , 300 from dual
union
select 'D' ,'F' , 600 from dual
union
select 'E' ,'A' , 400 from dual
union
select 'F' ,'G' , 1000 from dual
union
select 'C' ,'B' , 600 from dual
)
SELECT a.*,CONNECT_BY_ISCYCLE from
--(
-- select * from a
-- minus
-- select a1.* from a a1, a a2
-- where a1.beginaddr=a2.toaddr and a2.beginaddr=a1.toaddr
--)
a
connect by NOCYCLE beginaddr=prior toaddr start with beginaddr='A'
select 'A' beginaddr ,'B' toaddr, 1000 long_km from dual
union
select 'A' ,'C' , 1100 from dual
union
select 'A' ,'D' , 900 from dual
union
select 'A' ,'E' , 400 from dual
union
select 'B' ,'D' , 300 from dual
union
select 'D' ,'F' , 600 from dual
union
select 'E' ,'A' , 400 from dual
union
select 'F' ,'G' , 1000 from dual
union
select 'C' ,'B' , 600 from dual
)
SELECT a.*,CONNECT_BY_ISCYCLE from
--(
-- select * from a
-- minus
-- select a1.* from a a1, a a2
-- where a1.beginaddr=a2.toaddr and a2.beginaddr=a1.toaddr
--)
a
connect by NOCYCLE beginaddr=prior toaddr start with beginaddr='A'