Reputation: 361
I have two tables.
DEPARTMENT (TABLE)
DEPTID NUMBER(38)
NAME CHAR(20)
RANK NUMBER(38)
EMPLOYEE (TABLE)
EMPID NUMBER(38)
DEPTID NUMBER(38)
NAME CHAR(40)
AGE NUMBER(38)
SALARY NUMBER(38)
And I am trying to run following query, which is continuously throwing error. The query is to update Rank in Department table based on the Average age of employees in every department.
UPDATE d
SET d.rank = T.rank
FROM department d
INNER JOIN
(SELECT
rownum as rank, age, deptId
FROM
(SELECT
AVG(age) AS age, deptid
FROM employee
GROUP by deptId
ORDER BY age DESC)) AS T ON T.deptId = d.deptId;
Upvotes: 2
Views: 149
Reputation: 36107
The syntax of UPDATE statement in Oracle does not support joins.
A MERGE statement can be used to do this task:
MERGE INTO DEPARTMENT d
USING (
SELECT
rownum as rank, age, deptId
FROM
(SELECT AVG(age) AS age, deptid
FROM employee
GROUP by deptId
ORDER BY age DESC)
) q
ON ( d.DEPTID = q.DEPTID )
WHEN MATCHED THEN UPDATE
SET d.RANK = q.rank
A working demo: http://sqlfiddle.com/#!4/f0f34/2
Upvotes: 2