Update multiple rows in Oracle using Join
We will check multiple ways to update rows using join condition.
Creating setup for this testing:
--Update multiple rows in Oracle using Join: Setup
CREATE TABLE EMP_JOIN_TEST
AS
SELECT EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
JOB_ID,
HIRE_DATE,
SALARY,
DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN(10, 20, 30); SELECT * FROM EMP_JOIN_TEST;
Adding a new column DEPARTMENT_NAME to test the update cases.
ALTER TABLE EMP_JOIN_TEST ADD(DEPARTMENT_NAME VARCHAR2(30));
Query as a data source:
In this scenario we will use the join between 2 tables as a data source. Then update one column with the same column value of other.
UPDATE (SELECT A.DEPARTMENT_ID,
A.DEPARTMENT_NAME,
B.DEPARTMENT_NAME DEPTNAME_MST
FROM EMP_JOIN_TEST A,
DEPARTMENTS B
WHERE A.DEPARTMENT_ID = B.DEPARTMENT_ID
) T
SET T.DEPARTMENT_NAME = T.DEPTNAME_MST; 10 rows updated.
SELECT * FROM EMP_JOIN_TEST;
In the above example we have used the joining between EMP_JOIN_TEST and DEPARTMENTS table and update the DEPARTMENT_NAME column of EMP_JOIN_TEST
ROLLBACK;
Value as a result of a query:
In this scenario, we will use a value which is the result of a join condition to update multiple rows of a column.
UPDATE EMP_JOIN_TEST A
SET DEPARTMENT_NAME = (SELECT DEPARTMENT_NAME
FROM DEPARTMENTS
WHERE DEPARTMENT_ID = A.DEPARTMENT_ID
)
WHERE DEPARTMENT_ID IS NOT NULL; 10 rows updated.
SELECT * FROM EMP_JOIN_TEST;
In the above example we have used the join condition to update the DEPARTMENT_NAME column of EMP_JOIN_TEST by the same column of DEPARTMENTS table.
ROLLBACK;
Merge Statement:
MERGE INTO EMP_JOIN_TEST C USING DEPARTMENTS T ON (C.DEPARTMENT_ID = T.DEPARTMENT_ID) WHEN MATCHED THEN UPDATE SET C.DEPARTMENT_NAME = T.DEPARTMENT_NAME;
10 rows merged.
SELECT * FROM EMP_JOIN_TEST;
Using MERGE statement results the same output.
RELATED TOPICS: