在迁移容器的过程中,如果我们有两张表;
-
TABLE_MAPPING (old_value, new_value)
-
TABLE_USING (value, data...)
TABLE_USING
正在引用 (FK) 不相关表中的容器。
TABLE_MAPPING
暂时用于迁移,目标是将内容从已弃用的容器移动到新容器。
这里的问题是,有时容器不仅会被替换,还会被分割成多个新容器,例如TABLE_MAPPING
可能包含:
查询将导致将值为“1”的一行“更新”为值为“10”和“11”的两行。
有没有简单的 SQL 方法可以做到这一点?或者我应该使用 PL/SQL?
编辑:根据要求,这里是使用 TABLE_MAPPING
之前/之后的示例上面
之前:
之后:
最佳答案
您需要两个步骤。下面我首先插入所有新行,然后删除所有旧行。
-- insert rows with new values
insert into table_using (value, data ...)
select m.new_value, u.data ...
from table_using u
join table_mapping m on m.old_value = u.value;
-- delete rows with old values
delete from table_using where value in (select old_value from table_mapping);
-- commit the transaction
commit;
关于SQL - 有条件地拆分容器行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65344112/