使用另一个 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中匹配的列是SID1CC的结构如下:

  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() 或其他一些值组合。