[英]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.