关于postgresql递归查询显示树状结构数据

系统在开发过程,用到机构信息的树状结构,数据库表中关键的三个字段:机构ID,父级机构ID,机构名。

网上搜了很多的技术文单。需要按示例一个个去仔细判别各个表名、字段 以及关联关系,头痛。整理其SQL编写模式如下:

 -------------------------------------------------------------------------------

WITH RECURSIVE 递归查询名称 AS (
    --起始第一条记录,即根节点
    SELECT 数据唯一索引ID值, 父ID值, cast(数据唯一索引ID值 as text) AS 节点遍历路径  --节点遍历路径,第一个节点的值为数据,注意此处必须为文本字符串
    FROM 源始数据表名
    WHERE 开始节点的字段名=开始节点判定条件
    
    UNION ALL
    
    --下属节点数据记录
    SELECT 下属查询表别名.数据唯一索引ID值, 下属查询表别名.父ID值, CONCAT(递归查询名称别名.节点遍历路径, '>', 下属查询表别名.数据唯一索引ID值) 节点遍历路径
    FROM 源始数据表名 下属查询表别名
    
    --连接递归查询
    JOIN 递归查询名称 递归查询名称别名 ON 递归查询名称别名.数据唯一索引ID值 = 下属查询表别名.父ID值
)
SELECT * FROM 递归查询名称 order by 节点遍历路径;

 -------------------------------------------------------------------------------

以下是个具体的示例:

WITH RECURSIVE tree AS (
    SELECT brcid, brcname,parentbrc, cast(brcid as text) AS path1
    FROM btc_src_brcinfo
    WHERE parentbrc='800000000' --开始节点
    UNION ALL
    SELECT e.brcid, e.brcname,e.parentbrc, CONCAT(s.path1, '>', e.brcid) path1
    FROM btc_src_brcinfo e
    JOIN tree s ON s.brcid = e.parentbrc
)
SELECT * FROM tree order by path1;

查询显示结果如下:

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值