mysql或者oracle递归查询部门层级

mysql

  1. 公用表表达式-CTE
    公用表表达式是一个命名的临时结果集,不作为对象存储,只在执行期间存在。

CTE基本语法:

with cite_name as
(
    query
)
select *
from cite_name
;
  1. CTE的递归查询
    CTE的递归查询就是需要不断的去“引用”CTE本身。

基本语法:

with recursive cte_name as
(
    initial_query     -- anchor member
    union all
    recursive_query -- 引用CTE名称的递归成员
)
select * 
from cte_name
;

CTE递归查询主要有三部分:

① 初始查询,形成递归查询的初始结果集
② 递归查询部分,引用CTE名称的查询
③ 终止条件,确保查询在不满足条件时终止
输出结果:

+---+
| n |
+---+
| 1 |
| 2 |
| 3 |
+---+
3 rows in set (0.01 sec)

在这里插入图片描述
注意:

递归部分,不能使用 聚合函数,distinct ,group by 子句, order by 子句,limit子句。

测试语句:

with recursive party_detail as
( 
select id, depart_name, depart_name as dept_structure
from ent_department
where id=100     -- 根部门ID
 
union
 
select a.id ,a.depart_name, concat(b.dept_structure, ' > ', a.depart_name) as dept_structure
from party_detail as b 
join ent_department as a on b.id=a.parent_id
)
select *
from party_detail
;

效果:
在这里插入图片描述

oracle

先看表格结构

在这里插入图片描述
在这里插入图片描述

那对于树状结构如何查询呢?Oracle提供递归查询的方式进行查询,基本语法如下:

SELECT [Column]..
  FEOM [Table]
  WHERE Conditional1
  START WITH Conditional2
  CONNECT BY PRIOR Conditional3
  ORDER BY [Column]

说明:

条件1—过滤条件,对全部返回的记录进行过滤。
条件2—根节点的限定条件,固然也可以放宽权限得到多个根节点,也就是获取多个树
条件3—链接条件,目的就是给出父子之间的关系是什么,根据这个关系进行递归查询(在上述表中就是REC_CODE=PARENT_CODE)
排序—对全部返回记录进行排序

你如果是根据节点往下查 PRIOR 放在前面;

SELECT *
FROM SYS_REC t
START WITH t.REC_CODE='350124'
CONNECT BY PRIOR t.REC_CODE = t.PARENT_CODE

在这里插入图片描述

如果是根据节点往上查PRIOR 放在后面;

	
SELECT *
FROM SYS_REC t
START WITH t.REC_CODE='350124'
CONNECT BY  t.REC_CODE = PRIOR t.PARENT_CODE

在这里插入图片描述

如果希望拼接的话就是

SELECT
	t.REC_CODE,
	SYS_CONNECT_BY_PATH ( t.REC_NAME, '\' ) AS REC_NAME 
FROM
	SYS_REC t START WITH t.REC_CODE ='350124' CONNECT BY PRIOR t.REC_CODE = t.PARENT_CODE
	

在这里插入图片描述
到这里就记录完啦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值