sql-- 创建一个示例表格,表示员工与经理的关系CREATE TABLE employees ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, manager_id INT REFERENCES employees(id));-- 插入一些示例数据INSERT INTO employees (name, manager_id) VALUES ('Alice', NULL), ('Bob', 1), ('Charlie', 2), ('David', 1), ('Eva', 3), ('Frank', 3);-- 使用递归自连接查询员工及其直接和间接经理WITH RECURSIVE manager_hierarchy AS ( SELECT id, name, manager_id FROM employees WHERE manager_id IS NULL UNION SELECT e.id, e.name, e.manager_id FROM employees e INNER JOIN manager_hierarchy m ON e.manager_id = m.id)SELECT * FROM manager_hierarchy;
在上面的例子中,我们创建了一个名为 `employees` 的表格,表示员工与经理的关系。通过使用 `WITH RECURSIVE` 子句,我们定义了一个递归查询,从根节点(没有经理的员工)开始,逐级连接员工与其经理。递归查询结果id | name | manager_id---|----------|------------1 | Alice | NULL2 | Bob | 13 | Charlie | 24 | David | 15 | Eva | 36 | Frank | 3在查询结果中,我们可以看到每个员工的直接和间接经理,形成了一个层次结构。## 递归自连接是 PostgreSQL 中强大而灵活的功能之一,可用于处理各种具有层次结构的数据。通过使用 `WITH RECURSIVE` 子句,我们能够轻松地创建递归查询,使得处理组织结构、分类体系等数据变得简单而直观。在实际应用中,这种技术可以被广泛应用于解决复杂的层次关系问题。希望这篇文章对你理解 PostgreSQL 中的递归自连接有所帮助。