DB2递归查询一棵树

最近项目中遇到需要对多层字典树进行遍历,需要在sql中就遍历出来,数据库为db2,db2要自己写递归,没有提供相应的函数 
例tree表:
create table tree 

   treeid, 
    treename, 
    treesuperid 


例子: 
WITH  RPL (treesuperid, treeid, treename,level) AS 

SELECT ROOT.treesuperid, ROOT.treeid, ROOT.treename,1 FROM tree ROOT where ROOT.treeid='120000' 
UNION ALL 
SELECT CHILD.treesuperid, CHILD.treeid, CHILD.treename,PARENT.level+1 FROM RPL PARENT, tree CHILD WHERE PARENT.treeid= CHILD.treesuperid 

select RPL.treesuperid, RPL.treeid, RPL.treename from RPL WHERE level =2 

这个sql是取的第二级树。 

如果要取完整的树的话,用下面sql (项目中亲测可用):

WITH  RPL (treesuperid, treeid, treename) AS 

SELECT ROOT.treesuperid, ROOT.treeid, ROOT.treename FROM tree ROOT where ROOT.treeid='120000' 
UNION ALL 
SELECT CHILD.treesuperid, CHILD.treeid, CHILD.treename FROM RPL PARENT, tree CHILD WHERE PARENT.treeid= CHILD.treesuperid 

 select RPL.treesuperid, RPL.treeid, RPL.treename from RPL

后记:不得不说哈,递归还是非常影响效率的,即使是SQL实现的递归(SQL以父子ID进行递归查询),项目中我需要递归的是大概6层字典且面临多棵树查询,DB2递归单棵树大概1秒钟(视具体情况可能有差异,但不大)。

后续为了提高效率,我换了种方式:将多级字典树所在的表添加标识字段来直接一次性SELECT出来集合(WHERE 标识字段=‘’),然后在java中通过代码进行拼接树,这种方式效率大大提升。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部