Updating rows in one table based on data from another has always been possible in Oracle, but the syntax was never elegant. You had to use a correlated subquery or an inline view workaround. Oracle 23ai introduces direct JOIN syntax in UPDATE statements, making multi-table updates far more readable.
The old way — correlated subquery:
UPDATE employees e
SET e.department_name = (
SELECT d.department_name
FROM departments d
WHERE d.department_id = e.department_id
)
WHERE EXISTS (
SELECT 1 FROM departments d
WHERE d.department_id = e.department_id
AND d.active = 1
);
The new way — direct JOIN (Oracle 23ai):
UPDATE employees e
JOIN departments d ON d.department_id = e.department_id
SET e.department_name = d.department_name
WHERE d.active = 1;
Much cleaner. The intent is immediately clear — join employees to departments, update the column, filter by a condition on the joined table.
Supported join types:
INNER JOINLEFT JOINRIGHT JOIN
Multi-column update example:
UPDATE employees e
JOIN salary_bands sb ON sb.grade = e.pay_grade
SET e.min_salary = sb.min_salary,
e.max_salary = sb.max_salary
WHERE sb.effective_date = DATE '2025-01-01';
Performance note: The Oracle optimizer can leverage indexes and statistics on the joined table just as it does with regular SELECT joins. In many cases, this will be equivalent or better than the correlated subquery approach.
If you’ve ever looked at UPDATE statements and wished they read more like SELECT statements, Oracle 23ai has finally granted that wish. This is one of those features you didn’t know you were missing until you have it.



