You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用递归生成INSERT语句填充person_department关联表

使用递归生成INSERT语句填充person_department关联表

嘿,我看你已经摸到门道了,递归CTE确实是处理这种层级关联的最佳方案!我帮你把没写完的递归部分补全,再结合INSERT语句,就能完美生成你需要的person_department关联数据啦。

先给你直接上可以运行的完整SQL:

WITH RECURSIVE department_hierarchy AS (
    -- 递归起始节点:通过group_id关联用户和对应的初始部门
    SELECT 
        p.id AS person_id,
        d.id AS department_id,
        d.parent_id
    FROM department d
    JOIN person p ON d.group_id = p.group_id
    
    UNION ALL
    
    -- 递归遍历父部门:沿着parent_id向上追溯所有层级
    SELECT 
        dh.person_id,
        d.id AS department_id,
        d.parent_id
    FROM department d
    JOIN department_hierarchy dh ON d.id = dh.parent_id
)
-- 将递归得到的所有关联关系插入目标表
INSERT INTO person_department (person_id, department_id)
SELECT person_id, department_id
FROM department_hierarchy
ORDER BY person_id, department_id;

我给你划几个关键的注意点,这也是你之前可能卡壳的地方:

  • 起始查询里一定要把person.id(也就是person_id)带上,不然递归过程中会丢失部门和用户的对应关系,最后生成的数据就没法正确关联到用户了
  • 递归步骤里,要把上一层的person_id一直传递下去,同时用当前层级的parent_id去关联上级部门的id,这样才能把每个用户对应的所有父部门都找出来
  • 最后直接把递归查询的结果插入到person_department表就行,加个ORDER BY是为了让结果和你给出的示例输出格式一致,看起来更整齐

执行完这个语句后,你的person_department表就会生成你想要的结果:每个用户对应自己的关联部门,以及该部门的所有上级父部门。

备注:内容来源于stack exchange,提问作者Java

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:39:52