Oracle:如何更新不同表中的多个列?

时间:2016-05-26 19:20:33

标签: sql oracle

我正在使用oracle数据库,并且有从某些其他表更新字段的情况。我的问题是它是更新所有记录而不是指定的条件。 例如,我试图从ADDRESS表更新EMPLOYEE表中的perm_address和temp_address。现在,我正在使用下面的查询。但是,它正在更新所有记录。

UPDATE EMPLOYEE EMP
     SET (EMP.PERM_ADDRESS, EMP.TEMP_ADDRESS) =
          (SELECT ADDR.PERM_ADDR,ADDR.TEMP_ADDR
           FROM ADDRESS ADDR
           WHERE ADDR.ID=EMP.ADDRESS_ID
          );

在Oracle中如何处理这种情况?通常,如何处理从多个表到源表的更新?

提前致谢....

3 个答案:

答案 0 :(得分:5)

添加WHERE子句以仅更新匹配的记录:

UPDATE EMPLOYEE EMP
     SET (EMP.PERM_ADDRESS, EMP.TEMP_ADDRESS) =
          (SELECT ADDR.PERM_ADDR, ADDR.TEMP_ADDR
           FROM ADDRESS ADDR
           WHERE ADDR.ID = EMP.ADDRESS_ID
          )
     WHERE EXISTS (SELECT 1 FROM ADDRESS ADDR WHERE ADDR.ID = EMP.ADDRESS_ID);

答案 1 :(得分:4)

使用MERGE语句更新包含来自另一个表的数据的表通常更简单。 https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm

这样的事情:

merge into employee emp
   using address addr
   on (addr.id = emp.address_id)
when matched 
   then update 
        set emp.perm_address = addr.perm_addr, 
            emp.temp_address = addr.temp_addr;

答案 2 :(得分:0)

用另一张表更新一张表-基本格式为

--ORACLE
update tableX t set (t.fldA, t.fldB) =
(select fldA, fldB from table_B where ID ='X')
where t.ID = 'Y'