使用SQL递归更新层级结构:子级层级更新异常求助
解决SQL递归更新子级层级的问题
你的递归CTE遍历逻辑是正确的,错误出在UPDATE语句的关联条件上:
原UPDATE语句里的ah.parent_id = a.asset_id会把递归计算的层级错误关联到父节点的上级,而非目标子节点本身。
修改后的完整查询
WITH RECURSIVE asset_hierarchy AS ( SELECT asset_id, parent_id, hierarchy_level FROM asset WHERE asset_id = 'AS-00000016' UNION SELECT E.asset_id, E.parent_id, ah.hierarchy_level + 1 FROM asset_hierarchy ah JOIN asset E ON ah.asset_id = E.parent_id ) UPDATE asset a SET hierarchy_level = ah.hierarchy_level FROM asset_hierarchy ah WHERE ah.asset_id = a.asset_id;
关键修改说明
把关联条件从ah.parent_id = a.asset_id改为ah.asset_id = a.asset_id后,递归CTE中每个节点计算出的正确层级,就能精准对应到asset表中同asset_id的记录,从而完成所有子级、孙级的层级更新。
内容的提问来源于stack exchange,提问作者Doyel Mishra
相关产品推荐
相关产品推荐

