假设我的数据采用以下方式:A
是B
的父级,B
是C
的父级,C
是D
和A
的父级是D
的子级。如何使用SQL查询在表中识别此类不规则数据?
+--------+-------+
| parent | child |
+--------+-------+
| A | B |
| B | C |
| C | D |
| D | A |
+--------+-------+
答案 0 :(得分:0)
不确定这究竟是否符合您的要求,但我会尝试一下:
with
mydata as
(
select 'A' as par, 'B' as ch from dual
union all
select 'B' as par, 'C' as ch from dual
union all
select 'C' as par, 'D' as ch from dual
union all
select 'D' as par, 'A' as ch from dual
),
mypaths as
(
SELECT sys_connect_by_path(par,'/') AS par,ch
FROM mydata
CONNECT BY nocycle par = PRIOR ch
)
select * from mypaths
where par like '%'||ch||'%'
这给出了如下结果:
par ch
/A/B/C/D A
/B/C/D/A B
/C/D/A/B C
/D/A/B/C D