Update Join
Oracle
-- 1. SubQuery 를 이용한 Update
UPDATE emp e
SET e.dname = (SELECT d.dname FROM dept d WHERE d.deptno = e.deptno)
WHERE EXISTS (SELECT 0 FROM dept d WHERE d.deptno = e.deptno)
;
-- 2. Updatable Join View 이용
-- 단, d.deptno 가 반드시 PK 이어야 함
-- 10G 까지는 PK 아니더라도 힌트로 제어 가능(/*+ bypass_ujvc */)
UPDATE /*+ bypass_ujvc */
(SELECT e.dname
, d.dname AS dname_new
FROM emp e
, dept d
WHERE d.deptno = e.deptno
)
SET dname = dname_new
;
-- 3. Merge
MERGE INTO emp e
USING dept d
ON (d.deptno = e.deptno)
WHEN MATCHED THEN
UPDATE SET e.dname = d.dname
;
SQL Server
-- From 절 사용 조인 --
UPDATE e
SET e.dname = d.dname
FROM emp e
INNER JOIN dept d
ON d.deptno = e.deptno
Sample
UPDATE b
SET B.QUERY_PARAM_NAME = SUBSTRING(b.QUERY_PARAM_NAME,4,80)
FROM FRM_QUERY_DEF_PARAM b
JOIN FRM_QUERY_DEF A
ON A.QUERY_DEF_ID = B.QUERY_DEF_ID
AND A.QUERY_NAME LIKE 'PAY%'
WHERE QUERY_PARAM_NAME IN ('av_ret_code','av_ret_message')
AND QUERY_PARAM_INOUT_TYPE = 'out'
MySQL
-- Update 절에서 바로 조인 --
-- SET sql_safe_updates = 0;
UPDATE emp e
INNER JOIN dept d
ON d.deptno = e.deptno
SET e.dname = d.dname
;