当前位置: 首页 > article >正文

mysql中递归的使用 WITH RECURSIVE

MySQL递归查询的基本语法和用法

MySQL 8.0及以上版本支持使用WITH RECURSIVE来进行递归查询。WITH RECURSIVE定义了一个递归的公用表表达式(CTE),它包含两个部分:递归的基础部分(非递归部分)和递归部分。

WITH RECURSIVE cte_name AS (
    -- 基础部分(非递归部分)
    SELECT ...
    UNION ALL
    -- 递归部分
    SELECT ...
    FROM cte_name ...
)
SELECT * FROM cte_name;

‌基础部分‌:这是递归查询的起点,它返回递归查询的初始结果集。
‌递归部分‌:这是递归查询的核心,它基于前一个结果集生成新的结果集,直到没有新的结果集产生为止。

实践编写MySQL递归SQL查询语句

假设我们有一个表示组织结构的表employees,结构如下:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    manager_id INT -- 上级员工的ID,自引用
);

查询某个员工(比如ID为1的员工)及其所有下属。

WITH RECURSIVE subordinates AS (
    -- 基础部分:查询初始员工(ID为1)
    SELECT id, name, manager_id
    FROM employees
    WHERE id = 1
    
    UNION ALL
    
    -- 递归部分:查询下属员工
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    INNER JOIN subordinates s ON e.manager_id = s.id
)
-- 最终查询结果
SELECT * FROM subordinates;

示例二

根据任务的部门id找顶级部门

WITH RECURSIVE parent_dept AS (
    -- 初始查询,选择起始部门
    SELECT id, name, parent_id
    FROM system_dept
    WHERE id = 21 -- 要查询的部门id
    UNION ALL
    -- 递归查询,选择所有上级部门
    SELECT d.id, d.name, d.parent_id
    FROM system_dept d
    INNER JOIN parent_dept pd on d.id = pd.parent_id
)
SELECT id
FROM parent_dept
where parent_id = 0 -- 留下顶级部门id


http://www.kler.cn/a/464027.html

相关文章:

  • 代码实战:基于InvSR对视频进行超分辨率重建
  • 基于Spring Boot + Vue3实现的在线汽车保养维修预约管理系统源码+文档
  • 个人交友系统|Java|SSM|JSP|
  • Java 数据库连接 - Sqlite
  • tcpdump指南(1)
  • 【机器学习】 卷积神经网络 (CNN)
  • ESP32_H2-ESP32_H2(IDF)学习系列-安装官方组件
  • 在K8S中,节点状态notReady如何排查?
  • Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析
  • 探索 JMeter While Controller:循环测试的奇妙世界
  • Qt天气预报系统设计界面布局第四部分右边
  • 【玩转OCR | 腾讯云智能结构化OCR应用探索和场景实践】
  • 给vscode的新项目选择虚拟环境
  • 【漫话机器学习系列】032.代表点聚类算法(Representative-Based Clustering Algorithm)
  • STM32单片机芯片与内部57 SPI 数据手册 寄存器
  • k8s系列--通过docker拉取的镜像导入到 containerd中
  • misc-python脚本学习笔记
  • SPI通信-(STM32)
  • 机器学习代码中常用方法
  • 租用服务器还是服务器托管:哪种方案更适合您?
  • uni-app:实现普通选择器,时间选择器,日期选择器,多列选择器
  • SD-WAN组网:定义、优势与应用
  • 智能手机多源传感器融合的室内定位方法综述
  • html本地字符串处理工具|去重、分割、求交集、求并集
  • SQL 实战:联合查询与子查询 – 数据比对与关联查询优化
  • PyTorch 中 reciprocal(取倒数)函数的深入解析:分析底层实现CPP代码