前言

详细的可以参考: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_idid 换换位置而已

多行合并一行

就是我输入部门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的递归写法:部门层级的更多相关文章

  1. C#递归所以部门展示到TreeView

    C#递归所以部门展示到TreeView 1.首先是数据库表的设计 新建一张部门表:TestUser表 1.ID自增int主键 2.DeptName:nchar(10)3.DeptCode:nchar( ...

  2. mysql批量更新写法

    mysql批量更新写法<pre> $namedmp=filter($_POST['namedmp']); $namedsp=filter($_POST['namedsp']); $name ...

  3. 快速排序基本思想,递归写法,python和java编写快速排序

    1.基本思想 快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了.在这不使用代码演示.下面我们来探讨一下快速排序的递归写法思想吧. 设要排序的数组是A[0]……A[N-1], ...

  4. mysql类似递归的一种操作进行层级查询

    select device_id,device_type,COUNT(1) count from ( select t1.device_id,t1.device_type,DATE_SUB(t1.re ...

  5. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

  6. oracle数据库兼容mysql的差异写法

    1.sysdate改为sysdate(),或者now(); 2.nvl(expr1,expr2) 改为IFNULL(expr1,expr2) nvl2(expr1,expr2,expr3)改为 IF( ...

  7. goroutine 加 channel 代替递归调用,突破递归调用的层级限制

    package main import ( "fmt" "github.com/davecgh/go-spew/spew" "github.com/B ...

  8. mysql+mybatis递归调用

    递归调用的应用场景常常出现在多级嵌套的情况,比如树形的菜单.下面通过一个简单的例子来实现mysql+mybatis的递归. 数据模型 private Integer categoryId; priva ...

  9. mysql中递归树状结构<转>

    在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点.但很遗憾,在MySQL的目前版本中还没有对应的功能. ...

  10. mysql 递归查询 主要是对于层级关系的查询

    最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询?在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是,在 ...

随机推荐

  1. 【问题】抓取微信公众号文章 特殊字符(&#65279;)问题

    最初对抓取的文章处理使用正则表达式统一处理,代码如下: Regex regex_p = new Regex(@"<p>\s*</p>", RegexOpti ...

  2. redmine 127访问成功,其他机器不能访问

    添加防火墙 入站规则

  3. jquery给一个li标签添加和去掉class属性

    $("li").addClass('xxx').siblings().removeClass("xxx");

  4. NumPy学习7

    今天学习了: 13, NumPy字符串处理函数 14, NumPy数学函数 15, NumPy算术运算 numpy_test7.py : import numpy as np ''' 13, NumP ...

  5. SpringBoot应用调用Linkis进行任务调度执行SQl;进行数据质量分析

    基于Linkis的Rest-API调用任务 官网示例:"https://linkis.apache.org/zh-CN/docs/1.3.2/api/linkis-task-operator ...

  6. Linux+Typora+Picgo图床配置

    Linux+Typora+Picgo图床配置 首先不建议安装在UbuntuStore里的版本,会有一些限制. 首先安装node.js 去官网下载编译好的源码,配置软连接,使全局都可以使用node命令. ...

  7. 使用克魔助手查看iOS 应用程序使用历史记录和耗能历史记录

    使用克魔助手查看iOS 应用程序使用历史记录和耗能历史记录 功能概述 克魔助手无需越狱即可访问iOS上各个应用程序的历史记录,包括: 最近几个月的app的详细启动时间记录,结束时间,app使用的硬件组 ...

  8. 解决VSCODE进行C代码编辑时结构体成员不可见或不提示的问题

    在使用VSCODE进行C代码编辑时,结构体成员有时可见,光标放到成员上时,系统会提示结构体成员对应的注释信息,但是有时候却不行. 经过测试,发现有如下规律:以test.c test.h include ...

  9. 使用Python+SymPy求解微分方程

    引言 在学习微积分或者物理.工程相关的学科时,微分方程常常是我们需要解决的一个重要问题.微分方程是包含未知函数及其导数的方程,广泛应用于描述变化过程中的规律,如物理中的运动方程.化学中的反应速率.经济 ...

  10. CDH6.2.0部署-亲自操作验证可行

    CDH6.2.0部署 PDF文档:https://files.cnblogs.com/files/duxingren/CDH6.2-pdf.zip 郑重声明:并非拿来主义.亲手实践并花费一天时间整理文 ...