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来查询,但是,在 ...
随机推荐
- ModuleNotFoundError: No module named '_bz2'
前言 运行 python 报错:ModuleNotFoundError: No module named '_bz2' when building python 解决 安装在 Ubuntu/Debia ...
- 如何编写正确高效的Dockerfile
Dockerfile是什么 Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像.拷贝文件.运行脚本等等,RUN, COPY, ADD指令都会生成一个 Lay ...
- 1、从DeepSeek API调用到Semantic Kernel集成:深度解析聊天机器人开发全链路
引言:AI时代下的聊天机器人开发范式演进 在生成式AI技术爆发的当下,基于大语言模型(LLM)的聊天机器人开发已形成标准化技术链路.本文将结合DeepSeek API与微软Semantic Kerne ...
- [每日算法 - 华为机试] leetcode690. 员工的重要性
入口 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer.https://le ...
- 渗透技巧——CDN绕过
渗透技巧--CDN绕过 一.前言: 在渗透站点的时候常常会遇见站点有CDN加速情况,就无法准确的找到目标IP.首先是检测如何发现有无CDN,然后才能说绕过的问题. 二.检测有无CDN: 首先有以下几种 ...
- ORA-28001:口令已经失效
Oracle用户口令默认的有效期导致的一个异常,留爪. Oralce11G下,创建的用户及口令,也就是用户密码默认会有个180天的过期时间, 如果超过180天用户口令未做修改,则该用户口令失效,也就是 ...
- Quartz.NET - 教程 2: 作业和触发器
译者注: 目录在这 Quartz.NET 3.x 教程 原文在这 Lesson 2: Jobs And Triggers Quartz API Quartz API 的主要接口和类如下: ISched ...
- 独家推荐!这款端到端AI测试工具 Testim,让效率飙升!(支持移动端、Web端)
在当今快速发展的软件开发时代,确保软件质量成为每个开发团队的首要任务. 随着人工智能(AI)和机器学习(ML)技术的飞速发展,AI测试工具应运而生,为软件测试领域带来了革命性的变化.今天,我要向大家强 ...
- Linux内存管理神器:smem工具
大家好,我是良许. 今天给大家分享一款 Linux 系统里的内存管理神器:smem . smem 是Linux系统上的一款可以生成多种内存耗用报告的命令行工具.与现有工具不一样的是 smem 可以报告 ...
- 基于Lighthouse搭建高颜值的YesPlayMusic网易云播放器
本文介绍了如何使用腾讯云的Lighthouse轻量应用服务器来搭建一个高颜值的第三方网易云播放器. 项目简介 本文使用的是YesPlayMusic项目,这是一款高颜值的第三方网易云播放器,它完全可以作 ...