繁体   English   中英

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

[英]Oracle : How to update multiple columns from different table?

我正在使用 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中如何处理这种情况? 通常,如何处理从多个表到源表的更新?

提前致谢....

添加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);

使用 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;

用另一个表更新一个表 - 基本格式是

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM