我有一张桌子(比方说ABC),它有以下结构:
COMP_CODE NAME SALARY SID1
-------------------------------------
NULL Alex 42000 85
NULL Alex 42000 89
NULL Alex 42000 96
NULL Alex 42000 100
NULL Alex 42000 52
我想更新上表中的_ COMP_CODE _列,而不是来自另一个表(CC)的值。两个表中的匹配列是 SID1 。 CC 的结构如下:
COMP_CODE SID1
----------------------
0AA 85
0AB 96
0CD 98
0DE 72
0EH 100
这可以通过 CURSOR 或任何其他方法来实现。
答案 0 :(得分:1)
MERGE INTO ABC t1
USING (select SID,max(COMP_CODE) COMP_CODE from CC GROUP BY SID) t2
ON (t1.SID1= t2.SID1)
WHEN MATCHED THEN
UPDATE SET t1.COMP_CODE = t2.COMP_CODE
答案 1 :(得分:1)
首先,不需要存储两次数据。您可以在需要时使用JOIN
来获取它。
您可以将值更新为:
update abc
set comp_code = (select cc.comp_code
from cc
where cc.sid1 = abc.sid1
);
这将更新abc
中的所有行。如果sid1
在第二个表中不匹配,则该值将保持为NULL
。
编辑:
您的第二个表包含多个具有相同值的行。你需要弄清楚你想要哪一个。选择任意一个:
update abc
set comp_code = (select cc.comp_code
from cc
where cc.sid1 = abc.sid1 and rownum = 1
);
您还可以选择MIN()
,MAX()
,LISTAGG()
或其他一些值组合。