join - PL/SQL 更新加入?

标签 join plsql

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

我有两张 table 。

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


Alex_Table2
---------------------------
PK         VAL
---------------------------
1          Value1_2
3          Value3_2

我想通过 PK 列将 VAL 从 Alex_Table2 更新为 Alex_Table1。

在 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中怎么做?谢谢!

更新

感谢 Cyber​​nate 和 ypercube 给了我两个有用的解决方案。他们都工作。但是,我想让您知道这两个语句之间的性能。

我的实际表包含 80,000 条记录,只有 3,000 条需要更新。
MERGE语句需要 0.533 秒。
UPDATE EXISTS语句需要超过 3 分钟(我没有测量实际时间。我在 3 分钟后终止了我的过程。)

最佳答案

使用 MERGE 语句:

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

关于join - PL/SQL 更新加入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6824088/

相关文章:

SQL 连接和输出格式

oracle - 如何确保 PL/SQL 程序在编译时启用了优化?

sql - Oracle表中分母最小公倍数的计算

MySQL连接无法从一张表中选择

php - MYSQL select with join, sorting and null 值

mysql left join - 使用 NULL 和条件返回行

sql - 我如何决定加入表的键

MySQL JOIN 需要 10 秒以上

for-loop - PL/SQL 中 If 条件中的字符串比较

oracle - 如何比较 PL/SQL 过程中的日期?