sql - 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 更新会更好。
解决方案
我认为这个 sql 将实现您正在寻找的内容:
update parent p
set value = (select distinct value
from child c
where c.parent_id = p.parent_id);
推荐阅读
- python - 通过记忆实现最小的硬币数量以进行更改?
- drake - 如何获得动态,我们可以在下一步中应用渐变(重新打开)
- spring - junit 测试无法捕获异常
- database - 使用飞镖将sqlite数据库加载到内存中?
- keycloak - 通过跳过登录页面进行 Keycloak 登录
- c++ - 在 C++ 中动态分配二维数组的警告
- excel - 来自常规表的 Excel 相关下拉列表
- javascript - 猫鼬一对多参考正在返回陈旧的数据
- python - Discord.py on_raw_reaction_add() - 不向成员添加角色
- r - 从 R 运行 PowerShell 脚本