使用另一个 table 的值更新 table
Update a table with values from another table
我有一个 table(例如,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
我想根据驻留在另一个 table [=23= 中的值更新上面 table 中的 _COMP_CODE_ 列](抄送)。两个table中匹配的列是SID1。 CC的结构如下:
COMP_CODE SID1
----------------------
0AA 85
0AB 96
0CD 98
0DE 72
0EH 100
能否通过 CURSOR 或任何其他类型的方法实现。
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
首先,没有必要将数据存储两次。您可以在需要时使用 JOIN
获取它。
您可以将值更新为:
update abc
set comp_code = (select cc.comp_code
from cc
where cc.sid1 = abc.sid1
);
这将更新 abc
中的所有行。如果 sid1
在第二个 table 中不匹配,则该值将保持 NULL
.
编辑:
您的第二个 table 有多行具有相同的值。你需要弄清楚你想要哪一个。任意选择:
update abc
set comp_code = (select cc.comp_code
from cc
where cc.sid1 = abc.sid1 and rownum = 1
);
您还可以选择 MIN()
、MAX()
、LISTAGG()
或其他一些值组合。
我有一个 table(例如,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
我想根据驻留在另一个 table [=23= 中的值更新上面 table 中的 _COMP_CODE_ 列](抄送)。两个table中匹配的列是SID1。 CC的结构如下:
COMP_CODE SID1
----------------------
0AA 85
0AB 96
0CD 98
0DE 72
0EH 100
能否通过 CURSOR 或任何其他类型的方法实现。
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
首先,没有必要将数据存储两次。您可以在需要时使用 JOIN
获取它。
您可以将值更新为:
update abc
set comp_code = (select cc.comp_code
from cc
where cc.sid1 = abc.sid1
);
这将更新 abc
中的所有行。如果 sid1
在第二个 table 中不匹配,则该值将保持 NULL
.
编辑:
您的第二个 table 有多行具有相同的值。你需要弄清楚你想要哪一个。任意选择:
update abc
set comp_code = (select cc.comp_code
from cc
where cc.sid1 = abc.sid1 and rownum = 1
);
您还可以选择 MIN()
、MAX()
、LISTAGG()
或其他一些值组合。