Liquibase/Oracle:将值从一个 table 复制到 one-to-many 关系中的另一个

Liquibase/Oracle: Copy value from one table to another in a one-to-many relationship

我有两个 table parentchild 具有 one-to-many 关系。我在 child table 中有一个值,对于给定的 parent ID,该值始终相同。因此,我想将值复制到 parent table.

中新创建的列
PARENT_ID VALUE
1 null
2 null
CHILD_ID  PARENT_ID VALUE
1 1 VALUE_1
2 1 VALUE_1
3 1 VALUE_1
4 2 VALUE_2
5 2 VALUE_2

我正在使用 Liquibase 并寻找适用于 Oracle 和 H2(在 Oracle 模式下)的解决方案。

这给了我一个语法错误,但嵌套的 SELECT 有效:

UPDATE (SELECT DISTINCT PARENT.PARENT_ID, CHILD.VALUE as OLD_COLUMN, PARENT.VALUE as NEW_COLUMN
FROM PARENT
LEFT JOIN CHILD
ON PARENT.PARENT_ID = CHILD.PARENT_ID) t
SET t.NEW_COLUMN = t.OLD_COLUMN;

嵌套的输出 SELECT:

PARENT_ID  OLD_COLUMN NEW_COLUMN
1 VALUE_1 null
2 VALUE_2 null

它不一定是 SQL 解决方案,Liquibase 更新会更好。

我认为这个 sql 将实现您正在寻找的东西:

update parent p
  set value = (select distinct value 
                 from child c 
                where c.parent_id = p.parent_id);