简体   繁体   English

更新Oracle 11g HR模式的列值

[英]Updating column values of Oracle 11g HR schema

I'm trying to update the salaries of all employees to the maximum salary of the department in which s/he works. 我正在尝试将所有员工的薪水更新为他/他工作所在部门的最高薪水。

ERD: ERD: 在此处输入图片说明

My try: 我的尝试:

UPDATE EMPLOYEES SET
(SELECT SALARY
FROM EMPLOYEES
GROUP BY SALARY, DEPARTMENT_ID) = 
(SELECT "MAX"(SALARY)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID);

Obviously this is wrong. 显然这是错误的。 It gives the error: 它给出了错误:

ORA-01747: invalid user.table.column, table.column, or column specification

How to do this correctly? 如何正确做到这一点?

You can use a correlated subquery: 您可以使用相关子查询:

UPDATE EMPLOYEES
    SET SALARY = (SELECT MAX(SALARY)
                  FROM EMPLOYEES E2
                  WHERE E2.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID
                 );

you can use merge 你可以使用merge

   MERGE INTO EMPLOYEES a
    USING ( SELECT DEPARTMENT_ID, MAX(SALARY) as sal
                      FROM EMPLOYEES group by DEPARTMENT_ID
         ) b
    ON ( a.DEPARTMENT_ID = b.DEPARTMENT_ID )
    WHEN MATCHED THEN 
    UPDATE SET  a.SALARY = b.sal

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM