【问题标题】: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 关键字” *原因:
*行动:

【问题讨论】:

    标签: sql oracle11g merge-statement


    【解决方案1】:

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

    1. ON 子句应始终带有“()”。
    2. 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。
      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多