我知道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
Run Code Online (Sandbox Code Playgroud)
我想将来自Alex_Table2的VAL更新为通过PK列加入的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;
Run Code Online (Sandbox Code Playgroud)
结果就是我的预期
Alex_Table1
---------------------------
PK VAL
---------------------------
1 Value1_2
2 Value2
3 Value3_2
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在PL/SQL中做?谢谢!
更新
谢谢Cybernate和ypercube给了我两个有用的解决方案.他们都工作.但是,我想告诉您这两个陈述之间的表现.
我的实际表包含80,000条记录,只有3,000条需要更新.
MERGE 声明需要0.533秒.
UPDATE EXISTS 声明需要3分钟(我没有测量实际时间.我在3分钟后终止了我的过程.)
Cha*_*ndu 19
使用MERGE语句:
MERGE INTO Alex_Table1 t1
USING Alex_Table2 t2
ON (t1.PK = t2.PK)
WHEN MATCHED THEN
UPDATE SET t1.VAL = t2.VAL
Run Code Online (Sandbox Code Playgroud)
UPDATE Alex_Table1 t1
SET t1.VAL =
( SELECT t2.VAL
FROM Alex_Table2 t2
WHERE t2.PK = t1.PK
)
WHERE EXISTS
( SELECT *
FROM Alex_Table2 t2
WHERE t2.PK = t1.PK
)
Run Code Online (Sandbox Code Playgroud)
这也有效(只要(PK)是主键Alex_Table2):
UPDATE
( SELECT t1.VAL A, t2.VAL B
FROM Alex_Table1 t1
JOIN Alex_Table2 t2
ON t2.PK = t1.PK
)
SET A = B ;
Run Code Online (Sandbox Code Playgroud)
在dbfiddle.uk测试.