首页 > 解决方案 > 在 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;

但它不起作用。谢谢!

标签: sqloraclejoin

解决方案


在 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 语句。


推荐阅读