2020. 6. 29. 08:07

MERGE Statement

WITH TARGET
AS (
SELECT Col FROM TargetTable WHERE Condition = :Condition
)
MERGE INTO TARGET
USING (
SELECT Col FROM SourceTable WHERE Condition = :Condition
) SOURCE ON TARGET.Col = SOURCE.Col
WHEN NOT MATCHED THEN
INSERT (Col) VALUES (Col)
WHEN NOT MATCHED BY SOURCE THEN
DELETE
OUTPUT $ACTION , INSERTED.*, DELETED.*;

1. SOURCE 테이블과 TARGET 테이블을 비교해서 TARGET 테이블에 INSERT, UPDATE, DELETE 문을 수행.

[INTO] 생략가능


2. SOURCE 테이블에 조건이 필요할 경우 서브쿼리 사용.


3. TARGET 테이블에 조건이 필요할 경우 WITH 문 사용.


4. WHEN MATCHED THEN

ON 절의 조건 컬럼이 SOURCE, TARGET 양쪽다 존재하는 경우 실행

보통 UPDATE 구분 사용


5. WHEN NOT MATCHED BY TARGET THEN

ON 절의 조건 컬럼이 SOURCE에는 있는데 TARGET 에 없는 경우 실행

보통 INSERT 구문 사용(INSERT TARGET)

[BY TARGET] 생략가능


6. WHEN NOT MATCHED BY SOURCE THEN

ON 절의 조건 컬럼이 TARGET에는 있는데  SOURCE에 없는 경우 실행

보통 DELETE 구문 사용(DELETE TARGET)