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

Sql 使用另一个表中的数据更新一个表的记录,sql,oracle11g,merge-statement,Sql,Oracle11g,Merge Statement,我有两张桌子 表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 w

我有两张桌子

表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:关键字上缺少 96900000-“关键字上缺少” *原因:
*行动:


在提供的代码片段中,有两件事需要考虑

  • ON子句应始终随附“()”
  • UPDATE语句中的WHERE子句不正确。希望这个片段能有所帮助

    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) ;
    
  • 试试这个

    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或解码。