使用递归生成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
相关产品推荐
相关产品推荐

