SQL MySql 递归更新 - 按照 parent_ids 设置 root_id
SQL MySql Recursive Update - Set root_id by following parent_ids
我有两个 table。 Table一个长这样
"element"
id | name
1 | first_element
2 | second_element
3 | third_element
"element_hierarchy"
id | element_id | parent_id | root_id
1 | 2 | 1 | 1
2 | 3 | 2 | 1
这个table表示元素3的父元素是2,2的父元素是1。另外,我们说1是这棵树的根层级,上面没有层级。
我的问题是我只是添加了最后一列“root_id”,但它目前还不存在。所以我必须用数据填充它。父 ID 已设置。
我需要找到一种方法将此更新烘焙到我们正在使用的 liquibase xml 中。它需要在 MySql 5.6、5.7 和 8 上工作。
我不确定在 MySql 更新语句中是否可行。我开始怀疑我是否必须在应用程序级别上这样做。
CREATE PROCEDURE fill_root_id ()
BEGIN
ALTER TABLE element_hierarchy ADD COLUMN root_id INT;
UPDATE element_hierarchy SET root_id = parent_id;
REPEAT
UPDATE element_hierarchy t1
JOIN element_hierarchy t2 ON t1.root_id = t2.element_id
SET t1.root_id = t2.parent_id;
UNTIL !ROW_COUNT() END REPEAT;
END
https://dbfiddle.uk/?rdbms=mysql_8.0&rdbms2=mysql_5.6&fiddle=ee350274be4759cbf598534351adb3a9
我有两个 table。 Table一个长这样
"element"
id | name
1 | first_element
2 | second_element
3 | third_element
"element_hierarchy"
id | element_id | parent_id | root_id
1 | 2 | 1 | 1
2 | 3 | 2 | 1
这个table表示元素3的父元素是2,2的父元素是1。另外,我们说1是这棵树的根层级,上面没有层级。
我的问题是我只是添加了最后一列“root_id”,但它目前还不存在。所以我必须用数据填充它。父 ID 已设置。
我需要找到一种方法将此更新烘焙到我们正在使用的 liquibase xml 中。它需要在 MySql 5.6、5.7 和 8 上工作。
我不确定在 MySql 更新语句中是否可行。我开始怀疑我是否必须在应用程序级别上这样做。
CREATE PROCEDURE fill_root_id ()
BEGIN
ALTER TABLE element_hierarchy ADD COLUMN root_id INT;
UPDATE element_hierarchy SET root_id = parent_id;
REPEAT
UPDATE element_hierarchy t1
JOIN element_hierarchy t2 ON t1.root_id = t2.element_id
SET t1.root_id = t2.parent_id;
UNTIL !ROW_COUNT() END REPEAT;
END
https://dbfiddle.uk/?rdbms=mysql_8.0&rdbms2=mysql_5.6&fiddle=ee350274be4759cbf598534351adb3a9