sql - 在 SQL 中使用两个连接更新表数据
问题描述
我有 3 张桌子,它们相互关联。如何将数据从表 3 上传到表 1?
我试过这段代码:
UPDATE table1
SET t1.new_column = t3.old_data
FROM table1 t1
INNER JOIN table2 t2 ON t1.some_key = t2.some_key
INNER JOIN table3 t3 ON t2.some_key2 = t3.some_key2;
但它不起作用。谢谢!
解决方案
在 Oracle 中更新连接是先使用连接,然后再使用更新来完成的。因此语法看起来像:
UPDATE (
select t1.new_column , t3.old_data
FROM table1 t1
INNER JOIN table2 t2 ON t1.some_key = t2.some_key
INNER JOIN table3 t3 ON t2.some_key2 = t3.some_key2
)
set new_column = old_data
连接必须产生所谓的“保留键”数据,即从查询返回的行必须与目标表中的行一一映射,否则会出错。
出于这个原因,人们经常选择将他们的更新重写为 MERGE 语句。
推荐阅读
- mysql - UNION ALL 语句不允许在最后一个表上插入附加列?
- python - 如何将 python pandas 数据透视表结果复制并粘贴到特定单元格范围内的现有工作簿中?
- c++ - 不同的数学符号绑定与共享库与 dlopen 并直接链接到可执行文件 (Linux)
- python - pandas:具有扩展应用和条件的 Groupby
- c++ - 在 gdb (Windows) 中为 dll 添加调试符号
- testing - 使用另一个实用程序服务获取空手道请求数据
- php - 循环遍历一个双排序表
- java - 在 pom 的导入依赖项中使用 main() 方法运行 maven 项目
- matlab - MATLAB中满足条件的多个等高线图的填充区域
- java - 如何修复“无法在调试对象 JVM 中找到 java.lang.Thread.setName() 的位置