DB2两个递归集合合并

一般用with可以连接两个集合,但是递归有所不同,通常我们会改写成如下的错误代码:
with
report(id,org_name,org_level,parent_org,description)
as (select id,org_name,org_level,parent_org,description from ad_orgtb where id = '111111'
union all select b.id,b.org_name,b.org_level,b.parent_org,b.description from report a,ad_orgtb b where b.id = a.parent_org
)
, reportOne(id,org_name,org_level,parent_org,description)
as (select id,org_name,org_level,parent_org,description from ad_orgtb where id = '111111'
union all select bb.id,bb.org_name,bb.org_level,bb.parent_org,bb.description from reportOne aa,ad_orgtb bb where bb.parent_org = aa.id
)
select distinct id,org_name,org_level,parent_org,description from report,reportOne

正确的写法应该如下:

with report(id,org_name,org_level,parent_org,description)
as (select id,org_name,org_level,parent_org,description from ad_orgtb where  id = '22222'  
union all select b.id,b.org_name,b.org_level,b.parent_org,b.description from report a,ad_orgtb b where  b.id = a.parent_org) 
,report_result(id,org_name,org_level,parent_org,description) 
as (
    select distinct id,org_name,org_level,parent_org,description from report order by org_level,id
)
,reportOne(id,org_name,org_level,parent_org,description) 
as (
    select id,org_name,org_level,parent_org,description from ad_orgtb where  id = '222222'  
    union all select b.id,b.org_name,b.org_level,b.parent_org,b.description from reportOne a,ad_orgtb b where  b.parent_org = a.id
) 
,reportOne_result(id,org_name,org_level,parent_org,description) as (
    select distinct id,org_name,org_level,parent_org,description from reportOne order by org_level,id
)select distinct * from (
SELECT id,org_name,org_level,parent_org,description
from report_result
union all
select id,org_name,org_level,parent_org,description
from reportOne)t

要先将结果集取了,才能放置多个递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值