Join PL/SQL更新连接?

Join PL/SQL更新连接?,join,plsql,Join,Plsql,我知道PL/SQL中没有Update Join语句。我曾经写过T-SQL 我有两张桌子 Alex_Table1 --------------------------- PK VAL --------------------------- 1 Value1 2 Value2 3 Value3 Alex_Table2 --------------------------- PK VAL ------------

我知道PL/SQL中没有Update Join语句。我曾经写过T-SQL

我有两张桌子

Alex_Table1
---------------------------
PK         VAL
---------------------------
1          Value1
2          Value2
3          Value3


Alex_Table2
---------------------------
PK         VAL
---------------------------
1          Value1_2
3          Value3_2
我想通过PK列将VAL从Alex_表2更新到Alex_表1

在T-SQL中,这很简单

update t1 set t1.VAL = t2.VAL
from
    Alex_Table1 t1
    inner join Alex_Table2 t2 on t1.PK = t2.PK;
结果就是我所期望的

Alex_Table1
---------------------------
PK         VAL
---------------------------
1          Value1_2
2          Value2
3          Value3_2
我的问题是如何在PL/SQL中执行?谢谢

更新

谢谢Cybernate和ypercube给了我两个有用的解决方案。他们都工作。然而,我想让你知道这两种说法之间的表现

我的实际表包含80000条记录,只有3000条需要更新

MERGE
语句需要0.533秒

UPDATE EXISTS
语句耗时超过3分钟(我没有测量实际时间。我在3分钟后终止了进程。)

这同样有效(只要
(PK)
Alex_Table2
的主键):

测试时使用合并语句:

MERGE INTO Alex_Table1 t1
USING Alex_Table2 t2
ON (t1.PK = t2.PK)
WHEN MATCHED THEN 
UPDATE SET t1.VAL = t2.VAL

哇!我还有一个问题。在我当前的例子中,update语句只涉及两个表。如果update语句涉及两个以上的表,我可以使用MERGE语句吗?您可以使用任何有效的查询来代替上述查询中的Alex_Table2。查看此链接以了解更多信息:@Alex:也来看看第二条路。因为您熟悉联接,所以将更新扩展到两个以上的表应该非常容易。很抱歉,您的第二条语句不起作用。错误消息是
SQL错误:ORA-00904:“T2”。“VAL”:无效标识符
@Alex:您现在可以试试吗?我现在没有Oracle机器可供测试。它仍然不工作。错误消息是
SQL错误:ORA-01779:无法修改映射到非键保留表的列
@RachSharp是否使用了完全相同的查询?您的联接是否基于表的主键?)
UPDATE
  ( SELECT t1.VAL A, t2.VAL B
    FROM Alex_Table1 t1
      JOIN Alex_Table2 t2
        ON t2.PK = t1.PK
  )
SET A = B ;
MERGE INTO Alex_Table1 t1
USING Alex_Table2 t2
ON (t1.PK = t2.PK)
WHEN MATCHED THEN 
UPDATE SET t1.VAL = t2.VAL