mysql5.7 递归查询
时间: 2023-10-05 21:10:22 浏览: 127
MySQL 5.7 支持递归查询,可以使用 WITH RECURSIVE 关键字来实现。
WITH RECURSIVE 语法结构如下:
```
WITH RECURSIVE cte_name (col1, col2, ...) AS (
-- 初始查询语句
SELECT col1, col2, ...
FROM table_name
WHERE ...
UNION [ALL]
-- 递归查询语句
SELECT col1, col2, ...
FROM table_name
JOIN cte_name ON ...
WHERE ...
)
SELECT col1, col2, ...
FROM cte_name;
```
其中 cte_name 为递归查询的名称,col1, col2, ... 为列名。递归查询由两部分组成:初始查询语句和递归查询语句。初始查询语句用于获取初始的结果集,递归查询语句用于根据初始结果集递归生成新的结果集,直到满足终止条件为止。
UNION ALL 用于将初始查询结果集和递归查询结果集合并,UNION 用于去除重复记录。
以下是一个简单的例子,从员工表中递归查询员工的上级领导:
```
WITH RECURSIVE cte_employee (id, name, leader_id) AS (
-- 初始查询语句,获取员工和他们的直接上级
SELECT id, name, leader_id
FROM employee
WHERE id = 1
UNION
-- 递归查询语句,获取员工的上级领导
SELECT e.id, e.name, e.leader_id
FROM employee e
JOIN cte_employee cte ON e.id = cte.leader_id
)
SELECT *
FROM cte_employee;
```
这个例子中,初始查询语句获取 id 为 1 的员工和他的直接上级,递归查询语句获取员工的上级领导,直到没有上级领导为止。最终结果为该员工及其所有上级领导的信息。
阅读全文