Can we use the output of one recursive query into another recursive query?

元气小坏坏 提交于 2019-12-23 05:29:05

问题


I wanted to find the topological sort of a DAG.

create table topo(
v1 int,
v2 int
);

Insert into topo values (1,3),(2,5),(3,4),(4,5),(4,6),(5,7),(6,5),(7,null)

WITH RECURSIVE path(S,d) AS(
 select t1.v1, 0 from topo t1 left outer join topo as t2 on t1.v1=t2.v2 
 where t2.v2 IS null
 UNION ALL
 select distinct t1.v2, path.d + 1 from path inner join topo as t1 on 
 t1.v1=path.S
)
select S from path group by S order by MAX(d);

This code gives the output of the topological order of a graph. Now i want to use this output into another recursive query to find the path from one vertex to another.

Can I use the output generated by this code into another recursive query. I was trying to do that in a normal way, but output was showing error.


回答1:


Adding to your existing recursive sql to get path:

WITH RECURSIVE path AS(
 select 
   t1.v1 as start,
   t1.v2 as end,  
   CAST(t1.v1 as VARCHAR(30)) as path 
   0 as depth
 from topo t1 
   left outer join topo as t2 on t1.v1=t2.v2 
 where t2.v2 IS null

 UNION ALL
 select 
   path.start ,
   t1.v2 as end,
   path.path || '>' || t1.v1,       
   path.d + 1 
 from path 
   inner join topo as t1 on t1.v1=path.end
)
SELECT * FROM path

Just adding in a couple of more fields to track what's happening as you traverse your hierarchy. Start will be static from the first query. It will be 1 for every record since that is your starting point. End is whatever node you are currently working. path will concatenate the end node as each new one is found. depth will tell you how far you traversed.



来源:https://stackoverflow.com/questions/44076722/can-we-use-the-output-of-one-recursive-query-into-another-recursive-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!