postgresql 递归查询与数据集拼接

    群里的一个兄弟提到了这样一个关于在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,name,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


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

转载于:https://my.oschina.net/congqian/blog/131385

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值