加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql 递归查询与数据集拼接

发布时间:2020-12-13 17:38:36 所属栏目:百科 来源:网络整理
导读:群里的一个兄弟提到了这样一个关于在postgresql查询语句的问题: 一个表里面有三个字段,分别是id,parentid,name。现在给一个id,如何写一个函数,查询到一个结果,就是整个链子的名字的组合,就是给一个id,找他的parentid 一直找下去 最后返回他们的名字

群里的一个兄弟提到了这样一个关于在postgresql查询语句的问题:

一个表里面有三个字段,分别是id,parentid,name。现在给一个id,如何写一个函数,查询到一个结果,就是整个链子的名字的组合,就是给一个id,找他的parentid 一直找下去 最后返回他们的名字组合,例如:name3_name2_name1,循环终止的条件是parentid=0。

基本上是一个多级的表结构,比较常见于权限设计和分类目录设计里。
基本的表结构就是 Category(id,name,parentid)

要解决这个问题主要有三个步骤:

1. 递归查询获取结果集:with recursive
2. 结果集转为数组:array()
3. 数组拼接为结果:array_to_string(Array,"_")

查询语句如下:

select
	array_to_string
        (
        ARRAY   (
		with recursive pp as   (
			select id,parentid from t_admin_power where id=10
			union all
			select p.id,p.name,p.parentid from t_admin_power p inner join pp on p.id=pp.parentid
		)
		select name from pp),'_'
	) as concat


当然性能不一定很好,还有没有更好的方法?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读