记录一下MySQL8.0以上SQL查一个树任意节点下所有子节点

211 阅读1分钟

记录一下MySQL8.0以上SQL查一个树任意节点下所有子节点 通过SQL的递归实现

  • 表结构
create table employees
(
    id         int auto_increment primary key,
    name       varchar(255) null,
    manager_id int          null
);
  • 数据插入语句
INSERT INTO employees (id, name, manager_id) VALUES (1, '1a', 0);
INSERT INTO employees (id, name, manager_id) VALUES (2, '1b', 0);
INSERT INTO employees (id, name, manager_id) VALUES (3, '2a', 1);
INSERT INTO employees (id, name, manager_id) VALUES (4, '2b', 1);
INSERT INTO employees (id, name, manager_id) VALUES (5, '2c', 1);
INSERT INTO employees (id, name, manager_id) VALUES (6, '3a', 5);
INSERT INTO employees (id, name, manager_id) VALUES (7, '3b', 5);
INSERT INTO employees (id, name, manager_id) VALUES (8, '3c', 4);
INSERT INTO employees (id, name, manager_id) VALUES (9, '3d', 4);
INSERT INTO employees (id, name, manager_id) VALUES (10, '3e', 4);
  • 查询语句
WITH RECURSIVE subordinates AS (
    SELECT id, name, manager_id
    FROM employees
    WHERE id = 4
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN subordinates s ON e.manager_id = s.id
)
SELECT * FROM subordinates;
  • WITH 声明可复用sql
  • WITH RECURSIVE 声明可递归查询sql