withrecursive cte as ( select pc1.id, cast(pc1.id asvarchar(500)) as id_seq, cast(pc1.name asvarchar(500)) as name_seq, from org pc1 where pc1.id in ('000000')
unionall
select pc2.id, cast(c.id_seq ||'>'|| pc2.id asvarchar(500)) as id_seq, cast(c.name_seq ||'>'|| pc2.name asvarchar(500)) as name_seq, from org pc2 innerjoin cte c on c.id=pc2.pid )
withrecursive cte as ( select pc1.id, pc1.pid, cast(pc1.id asvarchar(500)) as id_seq, cast(pc1.name asvarchar(500)) as name_seq, from org pc1 where pc1.id in ('66666')
unionall
select pc2.id, pc2.pid, cast(pc2.id ||'>'|| c.id_seq asvarchar(500)) as id_seq, cast(pc2.name ||'>'|| c.name_seq asvarchar(500)) as name_seq, from org pc2 innerjoin cte c on c.pid=pc2.id )
select ct.*from cte ct;
SQL
彩蛋
利用with recursive实现斐波那契数列
方法1
1 2 3 4 5 6 7 8 9 10
withrecursive fibonacci as ( select1as n, 0as fib_n,1as next_fib_n
unionall
select n+1, next_fib_n, fib_n+next_fib_n from fibonacci where n <40 )
select*from fibonacci;
SQL
方法2
1 2 3 4 5 6 7 8 9 10
withrecursive fibonacci(n,fib_n,next_fib_n) as ( select1, 0 ,1
unionall
select n+1, next_fib_n, fib_n+next_fib_n from fibonacci where n <40 )