SQL 递归查询子级或父级

        实际业务中经常会使用到无限级分类,当我们需要根据一个指定分类推算出它下面的所有子级,包括子级的子级等,或者推算出所有父级,包括父级的父级等,我一般是通过后端代码来递归推算。其实也可以通过SQL语句来实现,免去写递归代码。不多废话,上SQL。

一、推算所有父级

with cte_parent(Id,Name,ParentId)
                            as
                            ( 
                                select Id,Name,ParentId    from DeviceTree    where Id= '{groupid}'
                                union all 
                                select a.Id,a.Name,a.ParentId    from DeviceTree as a inner join cte_parent as b
                                on a.Id=b.ParentId where a.ParentId!='00000000-0000-0000-0000-000000000000' and a.isdelete=0
                            )                        
                            select Id,Name from cte_parent;

 

二、推算所有子级

with cte_child(Id,Name,ParentId) 
                            as 
                            ( 
                                select Id,Name,ParentId from DeviceTree where Id = '{groupid}'
                                union all 
                                select a.Id,a.Name,a.ParentId from DeviceTree a 
                                inner join  cte_child b on ( a.ParentId=b.Id) where a.isdelete=0  
                            )
                            select Id,Name from cte_child;

 

以上代码未做性能测试,仅供参考。

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值