17,089
社区成员
发帖
与我相关
我的任务
分享
--第一步分组后加前缀标号
UPDATE TABLE_NAME TT
SET CATID =
(SELECT CASE
WHEN ROW_NUM < 10 THEN
'000'
WHEN ROW_NUM < 100 THEN
'00'
WHEN ROW_NUM < 1000 THEN
'0'
ELSE
''
END || BB.ROW_NUM
FROM (SELECT AA.ID,
AA.PARENT_ID,
ROW_NUMBER() OVER(PARTITION BY AA.PARENT_ID ORDER BY ID) ROW_NUM
FROM TABLE_NAME AA) BB
WHERE BB.ID = TT.ID);
--第二步 因为parent_id为-1的不需要改变 则改变下一级的 CATID
UPDATE TABLE_NAME TT
SET CATID =
(SELECT AA.CATID FROM TABLE_NAME AA WHERE AA.ID = TT.PARENT_ID) || --找到父节点的CATID 并合并
TT.CATID
WHERE TT.PARENT_ID IN (SELECT ID FROM TABLE_NAME WHERE PARENT_ID = -1) --父节点为第一级的id
;
--第三步 更改第三级
UPDATE TABLE_NAME TT
SET CATID =
(SELECT AA.CATID FROM TABLE_NAME AA WHERE AA.ID = TT.PARENT_ID) || --找到父节点的CATID 并合并
TT.CATID
WHERE TT.PARENT_ID IN
(SELECT ID
FROM TABLE_NAME BB
WHERE BB.PARENT_ID IN
(SELECT ID FROM TABLE_NAME WHERE PARENT_ID = -1)) --父节点为第二级的id
;
--以此类推 有多少级就执行多少次