如何在pl/sql中编写查询以识别数据中的循环关系
假设我有以下方式的数据,如何在pl/sql中编写查询以识别数据中的循环关系,sql,oracle,Sql,Oracle,假设我有以下方式的数据,A是B的父级,B是C的父级,C是D的父级,A是D的子级。如何使用SQL查询识别表中的此类不规则数据 +--------+-------+ | parent | child | +--------+-------+ | A | B | | B | C | | C | D | | D | A | +--------+-------+ 不确定这是否正是您想要的,但我会尝试一下: with mydata
A
是B
的父级,B
是C
的父级,C
是D
的父级,A
是D
的子级。如何使用SQL查询识别表中的此类不规则数据
+--------+-------+
| parent | child |
+--------+-------+
| A | B |
| B | C |
| C | D |
| D | A |
+--------+-------+
不确定这是否正是您想要的,但我会尝试一下:
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
不确定这是否正是您想要的,但我会尝试一下:
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
读取连接方式读取连接方式