首页 > 数据库 >PostgreSQL的递归查询(with recursive)

PostgreSQL的递归查询(with recursive)

时间:2023-03-20 20:01:09浏览次数:45  
标签:PostgreSQL recursive 递归 -- MODULE cte module id select




[color=red][b]示例[/b][/color]

with RECURSIVE cte as 
(
select a.* from tb_sm_module a where module_id=0
union all
select k.* from tb_sm_module k inner join cte c on c.module_id = k.parent_id
)select cte.* from cte;



[img]http://dl2.iteye.com/upload/attachment/0107/0746/f28bebac-0d06-3dab-996a-16243a948c2e.png[/img]




with RECURSIVE cte as
(
select a.module_id,cast(a.module_name as varchar(100)) from tb_sm_module a where module_id=0
union all
select k.module_id,cast(c.module_name||'>'||k.module_name as varchar(100)) as module_name from tb_sm_module k inner join cte c on c.module_id = k.parent_id
)select module_id,module_name from cte ;



[img]http://dl2.iteye.com/upload/attachment/0107/0748/9251909d-0fc4-368d-8b9b-3a76f71f6314.png[/img]


这里有一个疑问,文什么把后面显示的层级名称改成module_id, 但不起到效果?




[b][color=red]两个方向的例子[/color][/b]


--向下查找
WITH RECURSIVE T AS(
SELECT * FROM TB_SM_MODULE T1 WHERE MODULE_ID=1 --原始信息
UNION AL]L
SELECT T2.* FROM TB_SM_MODULE T2,T --附加信息
WHERE T2.PARENT_ID = T.MODULE_ID --附加信息的父亲等原始信息
)SELECT * FROM T


--向上查找
WITH RECURSIVE T AS(
SELECT * FROM TB_SM_MODULE T1 WHERE MODULE_ID=1053 --原始信息
UNION ALL
SELECT T2.* FROM TB_SM_MODULE T2,T --附加信息
WHERE T2.MODULE_ID = T.PARENT_ID --原始信息的父亲等于附加信息
)SELECT * FROM T

标签:PostgreSQL,recursive,递归,--,MODULE,cte,module,id,select
From: https://blog.51cto.com/u_3871599/6138557

相关文章

  • postgresql 分组取前5条记录
    select*from(selectid,name,state,amount_total,row_number()over(partitionbystateorderbyamount_total)asrow_numfromsale_order)asa......
  • PostgreSQL temp table 全链路 实现原理
    文章目录​​背景​​​​使用​​​​实现​​​​创建表​​​​插入​​​​删除表​​背景表(table/relation)作为PostgreSQL数据库中最为常用的一种数据库对象,用户......
  • homebrew 安装postgresql 记录
    homebrew安装记录homebrew可以更好的在mac或liunx上管理软件包,其具有以下优点:Homebrew会将软件包安装到独立目录,并将其文件软链接至/opt/homebrew。Homebrew......
  • OpenEuler安装配置PostgreSQL
    一、准备条件OpenEuler(Hyper-V虚拟机):版本:20.03LTSSP2下载地址:https://www.openeuler.org/zh/download/PostgreSQL:版本:13.4源码版下载地址:https://www.pos......
  • 递归
    递归就是A方法调用A方法,自己调用自己publicstaticvoidmain(String[]args){System.out.println(f(5));}publicstaticintf(intn){if(n==1){return......
  • 算法之禅-递归01
    构造树,并求每条路径和第一步:构造树节点用到的类:publicclassNode{publicintVal{get;set;}publicNode?LNode{get;set;}publicNode?RNode{get;set;......
  • 3.6 栈与递归
    递归的定义若一个对象部分包含它自己,或用自己给自己定义,则称这个对象是递归的。若一个过程直接地或间接调用自己,则称这个过程是递归的过程。例如:递归求n的阶乘long......
  • 递归与回溯法
    递归 引入什么是递归?先看大家都熟悉的一个民间故事:从前有座山,山上有座庙,庙里有一个老和尚在给小和尚讲故事,故事里说,从前有座山,山上有座庙,庙里有一个老和尚在给小......
  • 代码随想录训练营day 14||二叉树理论基础篇、二叉树的递归遍历、二叉树的迭代遍历
    二叉树理论基础篇二叉搜索树前面介绍的树,都没有数值的,而二叉搜索树是有数值的了,二叉搜索树是一个有序树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值......
  • 使用Navicat连接的PostgreSQL数据库
    1、切换到posgres用户:su-postgerssu-postgres#切换postgres用户psql#进入psql交互命令行\l#查看数据库列表......