PostgreSQL 递归查询(含层级和结构)
-- 创建一个名为"recursive_query_example"的递归查询来获取组织结构中的所有员工
WITH RECURSIVE org_tree AS (
-- 初始查询,从顶级组织开始
SELECT org_id, parent_org_id, org_name
FROM organizations
WHERE parent_org_id IS NULL
UNION ALL
-- 递归查询,获取每个组织的子组织
SELECT o.org_id, o.parent_org_id, o.org_name
FROM organizations o
INNER JOIN org_tree ot ON o.parent_org_id = ot.org_id
),
-- 使用cte_employees表示员工信息,并关联组织结构
employees_with_org AS (
SELECT e.emp_id, e.emp_name, e.org_id
FROM employees e
JOIN org_tree ot ON e.org_id = ot.org_id
)
-- 最终查询,选择所有员工的信息
SELECT * FROM employees_with_org;
这个例子展示了如何使用PostgreSQL的递归CTE来获取一个组织结构中所有员工的信息。首先定义了一个递归的公用表表达式org_tree
,它从顶级组织开始,并递归地获取每个组织的子组织。然后,使用这个递归查询结果,联结员工信息,最终得到一个包含所有员工和相应组织信息的结果集。
评论已关闭