- 단일 테이블
- ORACLE
MERGE INTO 타겟테이블 // 결과가 완료되는 테이블
USING DUAL
ON (필드1= 비교할 대상) // 조건
WHEN MATCHED THEN // 존재하면 UPDATE
UPDATE SET
타겟_필드1= 'aaa'
,타겟_필드2= 'bbb'
WHEN NOT MATCHED THEN // 존재하지 않으면 INSERT
INSERT (타겟_필드1, 타겟_필드2, 타겟_필드3....)
VALUES(
'aaa'
, 'bbb'
, 'ccc'
); // MERGE문에서는 ; 를 포함
- MSSQL
MERGE INTO 타겟테이블 // 결과가 완료되는 테이블
USING (SELECT 1 AS DUM) X // 임의로 select문을 선언해야함
ON (필드1= 비교할 대상) // 조건
WHEN MATCHED THEN // 존재하면 UPDATE
UPDATE SET
타겟_필드1= 'aaa'
,타겟_필드2= 'bbb'
WHEN NOT MATCHED THEN // 존재하지 않으면 INSERT
INSERT (타겟_필드1, 타겟_필드2, 타겟_필드3....)
VALUES(
'aaa'
, 'bbb'
, 'ccc'
); // MERGE문에서는 ; 를 포함
- 두개의 테이블
MERGE INTO 타겟테이블 A // 결과가 완료되는 테이블
USING 소스테이블 B // 데이터를 가져오는 테이블 또는 쿼리
ON (A.필드1=B.필드1 AND A.필드2=B.필드2 ....) // JOIN조건
WHEN MATCHED THEN // 존재하면 UPDATE
UPDATE SET
A.타겟_필드1=B.소스_필드1
,A.타겟_필드2=B.소스_필드2
WHEN NOT MATCHED THEN // 존재하지 않으면 INSERT
INSERT (타겟_필드1, 타겟_필드2....) // alias를 사용하지않음 (A.타겟_필드1, A.타겟_필드2 이와같이 사용할경우 문제발생)
VALUES(
B.소스_필드1
, B.소스_필드2
, B.소스_필드3
); // MERGE문에서는 ; 를 포함
'DB > SQL' 카테고리의 다른 글
[SQL] 속도 개선 TIP (0) | 2019.12.03 |
---|---|
[SQL] 소계, 합계구하기 (ROLLUP, GROUPING_ID) (0) | 2019.12.03 |
[SQL] GROUP BY 개념적 정의 (0) | 2019.12.03 |
[SQL] INDEX 삭제 (0) | 2019.12.02 |
[SQL] 특정 문자만 UPDATE (0) | 2019.12.02 |