使用另一个表中的数据更新一个表的记录
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。以上是关于使用另一个表中的数据更新一个表的记录的主要内容,如果未能解决你的问题,请参考以下文章
从另一个表的多条记录更新一个表中的一条记录。其中一个表的列名是另一个表的字段