mysql的递归写法:部门层级
前言
详细的可以参考:https://cloud.tencent.com/developer/article/2106748
这里用 WITH RECURSIVE 实现递归,需要 MySQL 8.0 版本以上
示例里没有加逻辑删除字段的筛选,自己加上即可,例如 is_delete = 0
oracle的递归看我另一篇博文:https://www.cnblogs.com/daen/p/17252462.html
表结构

数据

查询子节点
示例
WITH RECURSIVE recursion AS (
SELECT
sd1.*
FROM
sys_dept sd1
WHERE
sd1.id = '101' UNION ALL
SELECT
sd2.*
FROM
sys_dept sd2,
recursion t2
WHERE
sd2.parent_id = t2.id
) SELECT
t1.*
FROM
recursion t1;
或者
WITH RECURSIVE recursion ( id, NAME, parent_id ) AS (
SELECT
sd1.id,
sd1.NAME,
sd1.parent_id
FROM
sys_dept sd1
WHERE
sd1.id = '101' UNION ALL
SELECT
sd2.id,
sd2.NAME,
sd2.parent_id
FROM
sys_dept sd2,
recursion t2
WHERE
sd2.parent_id = t2.id
) SELECT
t1.id,
t1.NAME,
t1.parent_id
FROM
recursion t1;
结果

不含自己的写法
加个不等于即可

查询父节点
示例
WITH RECURSIVE recursion AS (
SELECT
sd1.*
FROM
sys_dept sd1
WHERE
sd1.id = '103' UNION ALL
SELECT
sd2.*
FROM
sys_dept sd2,
recursion t2
WHERE
sd2.id = t2.parent_id
) SELECT
t1.*
FROM
recursion t1;
结果

不含自己的写法
加个不等于即可

查询子节点和父节点的区别
其实就是将 parent_id和id 换换位置而已

多行合并一行
就是我输入部门ID,然后获取到他的所有的父级的部门名称,拼接成一个字符串
示例
WITH RECURSIVE recursion AS (
SELECT
sd1.*
FROM
sys_dept sd1
WHERE
sd1.id = '103' UNION ALL
SELECT
sd2.*
FROM
sys_dept sd2,
recursion t2
WHERE
sd2.id = t2.parent_id
) SELECT
group_concat( t1.`name` ORDER BY t1.`level` ASC SEPARATOR '#' ) AS nameList
FROM
recursion t1;
结果

mysql的递归写法:部门层级的更多相关文章
- C#递归所以部门展示到TreeView
C#递归所以部门展示到TreeView 1.首先是数据库表的设计 新建一张部门表:TestUser表 1.ID自增int主键 2.DeptName:nchar(10)3.DeptCode:nchar( ...
- mysql批量更新写法
mysql批量更新写法<pre> $namedmp=filter($_POST['namedmp']); $namedsp=filter($_POST['namedsp']); $name ...
- 快速排序基本思想,递归写法,python和java编写快速排序
1.基本思想 快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了.在这不使用代码演示.下面我们来探讨一下快速排序的递归写法思想吧. 设要排序的数组是A[0]……A[N-1], ...
- mysql类似递归的一种操作进行层级查询
select device_id,device_type,COUNT(1) count from ( select t1.device_id,t1.device_type,DATE_SUB(t1.re ...
- 关于java的递归写法,经典的Fibonacci数的问题
经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...
- oracle数据库兼容mysql的差异写法
1.sysdate改为sysdate(),或者now(); 2.nvl(expr1,expr2) 改为IFNULL(expr1,expr2) nvl2(expr1,expr2,expr3)改为 IF( ...
- goroutine 加 channel 代替递归调用,突破递归调用的层级限制
package main import ( "fmt" "github.com/davecgh/go-spew/spew" "github.com/B ...
- mysql+mybatis递归调用
递归调用的应用场景常常出现在多级嵌套的情况,比如树形的菜单.下面通过一个简单的例子来实现mysql+mybatis的递归. 数据模型 private Integer categoryId; priva ...
- mysql中递归树状结构<转>
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点.但很遗憾,在MySQL的目前版本中还没有对应的功能. ...
- mysql 递归查询 主要是对于层级关系的查询
最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询?在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是,在 ...
随机推荐
- 少样本学习实战:Few-Shot Prompt设计
让AI用最少样本学会"举一反三" 想象一下,你要教一个外星人认识地球上的动物.如果只给它看三张哈士奇的照片,它可能会认为所有四条腿的动物都叫"哈士奇".这就是A ...
- 【MATLAB习题】双摇杆机构的运动学分析
1.双摇杆机构概述 双摇杆机构的判别方法: 最长杆长度+最短杆长度 ≤ 其他两杆长度之和,连杆(机架的对杆)为最短杆时. 如果最长杆长度+最短杆长度 >其他两杆长度之和,此时不论以何杆为机架,均 ...
- js回忆录(5),终章
无论走到哪里,都应该记住,过去都是假的,回忆是一条没有尽头的路,一切以往的春天都不复存在,就连那最坚韧而又狂乱的爱情归根结底也不过是一种转瞬即逝的现实. --马尔克斯 <百年孤独> 人生就 ...
- K8S 问题排查: cgroup 内存泄露问题
Posted on 2019年12月6日Leave a comment Contents [hide] 1 前言 2 现象 3 原因 4 解决方案 4.1 方案一 4.2 方案二 4.3 方案三 5 ...
- leetcode每日一题:最少翻转操作数
题目 2612. 最少翻转操作数 给你一个整数 n 和一个在范围 [0, n - 1] 以内的整数 p ,它们表示一个长度为 n 且下标从 0 开始的数组 arr ,数组中除了下标为 p 处是 1 以 ...
- DevOps的工作岗位的要求
## 为什么需要DevOps 不是每个人都能理解可靠的版本管理和牢固的构建系统的重要性. 也不是任何人能使得软件的发布达到可靠性,可重复性和可审计的高标准.Devops的职责就是将软件的构建和发布的流 ...
- WPF旋转板栈设计一例
效果图 项目中需要做一个机台的平面视图,点击其中一个料盒时,弹出该料盒的料管列表,用WPF示例做了一下,效果如下: 用户控件XAML 1 <UserControl x:Class="W ...
- hybrid应用自动化
一.hybrid介绍 hybrid是一种混合app,将h5页面嵌入native原生页面. 基于uiautomator+chromedriver.native部分走uiautomator,web部分走c ...
- 电商商品推荐系统实战:基于TensorFlow Recommenders构建智能推荐引擎
引言:推荐系统的商业价值与实现挑战 在电商领域,推荐系统承担着提升用户转化率和平台GMV的核心使命.根据麦肯锡研究,亚马逊35%的销售额来自推荐系统,Netflix用户75%的观看行为由推荐驱动.传统 ...
- hadoop部署安装(三)zookeeper+yarn
1. 配置zookeeper 3.1 解压存放指定目录 [root@bogon src]# tar xf zookeeper-3.4.10.tar.gz [root@bogon src]# mv zo ...