MySQL 递归查询:获取用户所有下级信息
假设我们有以下的用户表 user 表:
+----+--------+------------+-----------+
| id | name | parent_id | level |
+----+--------+------------+-----------+
| 1 | A | NULL | 1 |
| 2 | B | 1 | 2 |
| 3 | C | 2 | 3 |
| 4 | D | 1 | 2 |
| 5 | E | 1 | 2 |
| 6 | F | 2 | 3 |
| 7 | G | 3 | 4 |
| 8 | H | 3 | 4 |
| 9 | I | 6 | 4 |
+----+--------+------------+-----------+
我们想要查询用户 A 的全部下级信息,包括下级、下下级等等,可以使用以下的 SQL 语句:
WITH RECURSIVE subordinates AS (
SELECT id, name, parent_id, level
FROM user
WHERE name = 'A'
UNION ALL
SELECT u.id, u.name, u.parent_id, u.level
FROM user u
JOIN subordinates s ON u.parent_id = s.id
)
SELECT *
FROM subordinates;
这段 SQL 语句使用了递归查询,首先查询出用户 A 的信息,然后使用 UNION ALL 连接到其下级信息,然后使用 JOIN 连接到下级的下级信息,以此类推,直到查询完所有的下级信息。最后使用 SELECT 查询出所有的结果。
结果如下:
+----+--------+------------+-----------+
| id | name | parent_id | level |
+----+--------+------------+-----------+
| 1 | A | NULL | 1 |
| 2 | B | 1 | 2 |
| 4 | D | 1 | 2 |
| 5 | E | 1 | 2 |
| 3 | C | 2 | 3 |
| 6 | F | 2 | 3 |
| 7 | G | 3 | 4 |
| 8 | H | 3 | 4 |
| 9 | I | 6 | 4 |
+----+--------+------------+-----------+
原文地址: https://www.cveoy.top/t/topic/nda7 著作权归作者所有。请勿转载和采集!