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中通过代码进行拼接树,这种方式效率大大提升。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
