阅读量: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 中递归查询父节点的功能。