首页 > 解决方案 > Liquibase / Oracle:以一对多关系将值从一个表复制到另一个表

问题描述

我有两个表parent,并且child具有一对多的关系。对于给定的父 ID,我在子表中有一个始终相同的值。因此,我想将该值复制到父表中新创建的列。

PARENT_ID 价值
1 无效的
2 无效的
CHILD_ID  PARENT_ID 价值
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 无效的
2 VALUE_2 无效的

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

标签: sqloracleliquibase

解决方案


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

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

推荐阅读