postgres 递归测试

一次偶然和别人交流问题,需要用到递归函数,做一次blog记录。

准备数据如下:

create table tt(
	t1 text,
	t2 text,
	t3 text,
	t4 text
 )

 insert into tt values('JS1','JS4','三通','直线');
 insert into tt values('JS1','JS2','三通','阀门');
 insert into tt values('JS2','JS1','阀门','三通');
 insert into tt values('JS2','JS3','阀门','');
 insert into tt values('JS3','JS2','','阀门');
 insert into tt values('JS4','JS1','直线','三通');
 insert into tt values('JS4','JS5','直线','直线');
 insert into tt values('JS5','JS4','直线','直线');
 insert into tt values('JS7','JS8','弯头','阀门');
 insert into tt values('JS8','JS7','阀门','弯头');
 insert into tt values('JS1','JS6','三通','弯头');
 insert into tt values('JS6','JS1','弯头','三通');
 insert into tt values('JS7','JS6','弯头','弯头');
 insert into tt values('JS6','JS7','弯头','弯头');

递归写法:

       

 with recursive r(t1,t2,t3,t4) as (
	select  * from tt where t1='JS1'
	union --all  取消all排重
	select  t.* from tt t inner join r on t.t1 = r.t2 where r.t4<>'阀门'  --不等于阀门继续递归
 )
 select  * from r  --where t4='阀门'

做个记录~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值