在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的join更新是先创建join再更新的。因此语法看起来像:

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

最新更新