使用另一个表中的数据更新一个表的记录

Posted

技术标签:

【中文标题】使用另一个表中的数据更新一个表的记录【英文标题】:Update records of one table using data from another table 【发布时间】:2017-08-21 04:45:28 【问题描述】:

我有两张桌子。

表 1:员工

EID Name    Gender
1   Peter   M
2   John    M
3   Melissa F

表 2:工资

EID Salary
1   6000
2   8000
3   10000

我需要将男性员工的工资提高 10%,女性员工的工资提高 15%。

以下是我使用过但在Oracle11g中无法达到要求的查询。

merge into salary
using employees on 
salary.eid = employees.eid
when matched then
update set
    salary.salary = 1.1*salary where employee.gender = 'M' ,
    salary.salary = 1.15*salary where employee.gender = 'F';

我收到以下错误消息:

SQL 错误:ORA-00969:缺少 ON 关键字 00969. 00000 - “缺少 ON 关键字” *原因: *行动:

【问题讨论】:

【参考方案1】:

在提供的 sn-p 中有两件事需要考虑。

    ON 子句应始终带有“()”。

    UPDATE 语句中的 WHERE 子句不正确。希望这个 sn-p 有所帮助。

    MERGE INTO SALARY USING EMPLOYEES 
    ON (salary.eid = employees.eid)
    WHEN MATCHED THEN
      UPDATE
      SET salary.salary = DECODE(employee.gender,'M',1.1*salary,'F',1.15*salary) ;
    

【讨论】:

【参考方案2】:

试试这个

Update salary 
set salary.salary=salary.salary*(select case t.gender when 'M' then 1.1 When 'F' then 1.15 end from employees t where t.eid= salary.eid)

【讨论】:

这里不需要 SELECT 语句。我们可以使用 CASE 或 DECODE。

以上是关于使用另一个表中的数据更新一个表的记录的主要内容,如果未能解决你的问题,请参考以下文章

从另一个表的多条记录更新一个表中的一条记录。其中一个表的列名是另一个表的字段

使用另一个表的记录作为WHERE参数更新一个表中的记录

如何获取另一个表中不存在的表的记录?

使用来自另一个表的相应数据更新所有表记录

oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段

数据库:表的插入,更新表中的数据记录,删除表中的数据记录