如何在pl / sql中编写查询以识别数据中的循环关系

时间:2017-05-01 23:36:48

标签: sql oracle

假设我的数据采用以下方式:AB的父级,BC的父级,CDA的父级是D的子级。如何使用SQL查询在表中识别此类不规则数据?

+--------+-------+
| parent | child |
+--------+-------+
| A      | B     |
| B      | C     |
| C      | D     |
| D      | A     |
+--------+-------+

1 个答案:

答案 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