假设我们有以下的用户表 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     |
+----+--------+------------+-----------+
MySQL 递归查询:获取用户所有下级信息

原文地址: https://www.cveoy.top/t/topic/nda7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录