使用另一个表中的值更新表

时间:2017-08-08 12:39:51

标签: sql oracle plsql cursor dml

我有一张桌子(比方说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 或任何其他方法来实现。

2 个答案:

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