Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在pl/sql中编写查询以识别数据中的循环关系_Sql_Oracle - Fatal编程技术网

如何在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

读取连接方式读取连接方式