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