sql递归查询-with as递归的实现(树形结构)

需求:从B01表里查出id='e066f33dabe655b650bc3031e43cb14b’的结果集,然后查出id等于结果集的parentId的所有结果集

B00表示id,B0101表示name,parentId表示他的父节点的id;
一般情况下,用子查询即可做到,sql语句如下:

SELECT B00,B0101 FROM B01 WHERE B00 = ‘e066f33dabe655b650bc3031e43cb14b’
union all
SELECT B00,B0101 FROM B01 WHERE PARENTID IN(SELECT B00 FROM B01 WHERE B00 = ‘e066f33dabe655b650bc3031e43cb14b’)

但是,如果存在多层的层级,就需要写很多重复的sql,所以用到了递归查询,with as

WITH a(B00) AS
(
SELECT one.B00 FROM B01 one WHERE one.B00 = ‘e066f33dabe655b650bc3031e43cb14b’

            UNION ALL
            
            SELECT two.B00  FROM a INNER JOIN B01 two on two.PARENTID = a.B00
    )

SELECT * FROM a
在这里插入图片描述
具体在动态sql中的使用如下:在这里插入图片描述

CTE的语法:

[ WITH <common_table_expression> [ ,n ] ]
<common_table_expression>::=
expression_name [ ( column_name [ ,n ] ) ]
AS
( CTE_query_definition )

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值