sql - 甲骨文 : How to update multiple columns from different table?

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

提前致谢......

最佳答案

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

关于sql - 甲骨文 : How to update multiple columns from different table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37469361/

相关文章:

sql - 测试短语以查看它们是否相互匹配

java - Oracle 生成的 PDF 文件中的 CreatorDate 字段为空

java - 如何解决 Oracle 客户端安装问题?

php - CakePHP 1.3 - where 子句中的未知列

sql - 递归查询列中的 anchor 和递归部分之间的类型不匹配

java - 将 ResultSet 传递给其他方法

c++ - Oracle 是否为 OCCI/OCI 提供公共(public)符号文件 (PDB)?

ORACLE 不保存日期时间。为什么?

mysql - SQL根据时间戳差异查询数据

mysql - MySQL 8 上的基本 sql 查询失败