sql递归查询父节点怎么实现

sql
1138
2024/5/27 13:21:11
栏目: 云计算
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在 SQL 中递归查询父节点通常使用递归查询语句来实现,其中使用了递归关键字 WITH RECURSIVE。下面是一个示例:

假设有一个表 employees ,其中包含员工的 ID 和上级员工的 ID,结构如下:

CREATE TABLE employees (
    id INT,
    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);

现在我们要查询员工 ‘David’ 的所有上级,可以使用递归查询语句如下:

WITH RECURSIVE cte AS (
    SELECT id, name, manager_id
    FROM employees
    WHERE name = 'David'
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN cte ON e.id = cte.manager_id
)

SELECT id, name
FROM cte;

上面的查询语句中,WITH RECURSIVE 创建了一个递归的公共表表达式(CTE),在第一部分中选择了员工 ‘David’ 的记录,然后在第二部分中通过递归的方式联接上级员工,直到找到最顶层的员工。最后在主查询中选择了所有上级员工的 ID 和姓名。

这样就可以实现在 SQL 中递归查询父节点的功能。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: sql怎么回滚某个时间的数据