MySQL递归查询

在MySQL中,没有内置的递归查询功能。然而,您可以使用存储过程或递归关联表来模拟递归查询。下面是一个示例,说明如何使用递归关联表模拟递归查询。

假设我们有一个名为"employees"的表,存储着员工的信息,其中包含员工的ID、姓名和上级ID。我们想要通过递归查询,找到某个员工的所有下属。以下是一个示例的表结构:

复制代码
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    manager_id INT
);

INSERT INTO employees (id, name, manager_id)
VALUES
    (1, 'Alice', NULL),
    (2, 'Bob', 1),
    (3, 'Charlie', 2),
    (4, 'David', 2),
    (5, 'Eve', 1);

现在,我们想要找到Alice的所有下属。我们可以使用递归关联表来实现这一目标。以下是一个示例查询:

复制代码
WITH RECURSIVE subordinates AS (
    SELECT id, name
    FROM employees
    WHERE name = 'Alice'
    UNION ALL
    SELECT e.id, e.name
    FROM employees e
    INNER JOIN subordinates s ON e.manager_id = s.id
)
SELECT *
FROM subordinates;

这个查询使用了CTE(Common Table Expression,通用表达式)和递归关联表的方法。在CTE中,我们首先选择了Alice的记录作为起始点。然后,我们在递归部分通过内连接将下属的记录与上级的记录关联起来,直到没有更多的下属为止。

运行以上查询,将返回Alice的所有下属的记录:

复制代码
+------+---------+
| id   | name    |
+------+---------+
|    2 | Bob     |
|    3 | Charlie |
|    4 | David   |
|    5 | Eve     |
+------+---------+

这就是一个使用递归关联表模拟递归查询的示例。请注意,递归查询可能会导致性能问题,因此在处理大型数据集时要小心使用。```

相关推荐
ta是个码农1 小时前
Mysql——日志
java·数据库·mysql·日志
hhzz2 小时前
SQL 窗口函数(Window Function)终极指南
数据库·sql
-L72 小时前
进入docker中mysql容器的方法
运维·mysql·docker·容器
没有bug.的程序员4 小时前
MyBatis 初识:框架定位与核心原理——SQL 自由掌控的艺术
java·数据库·sql·mybatis
Databend4 小时前
Databend 亮相 DTCC 2025:存算分离架构引领湖仓一体化
数据库
回家路上绕了弯5 小时前
ClickHouse 深度解析:从核心特性到实战应用,解锁 OLAP 领域新势能
数据库·后端
张铁铁是个小胖子5 小时前
mysql是怎样运行的(梳理)
数据库·mysql
许泽宇的技术分享7 小时前
当自然语言遇上数据库:Text2Sql.Net的MCP革命如何重新定义开发者与数据的交互方式
数据库·.net·text2sql·mcp
2301_803554527 小时前
redis学习
数据库·redis·学习
weixin_456588157 小时前
【java面试day19】mysql-优化
java·mysql·面试