| 물리명 | 논리명 | 타입 | 길이 | KEY |
|---|---|---|---|---|
| 머지 키 | merge_key | 문자형 | PK | |
| 머지 값 | merge_value | 문자형 | 100 |
CREATE TABLE ex_merge ( merge_key VARCHAR(100) NOT NULL PRIMARY KEY, merge_value VARCHAR(100) NOT NULL );
/* MySQL 4.1 이상/MariaDB 5.1 이상 */ -- 조건은 PK, UK 컬럼만 가능 INSERT INTO ex_merge ( merge_key , merge_value ) VALUES ( '1' , 'INSERT' ) ON DUPLICATE KEY UPDATE merge_value = 'UPDATE' ;
/* MSSQL 2008 이상 */ MERGE INTO ex_merge a USING (SELECT 1 AS dummy) b ON a.merge_key = '1' WHEN MATCHED THEN UPDATE SET merge_value = 'UPDATE' WHEN NOT MATCHED THEN INSERT ( merge_key , merge_value ) VALUES ( '1' , 'INSERT' ) ;
/* Oracle 9i 이상/Tibero 6 이상 */ MERGE INTO ex_merge USING DUAL ON (merge_key = '1') WHEN MATCHED THEN UPDATE SET merge_value = 'UPDATE' WHEN NOT MATCHED THEN INSERT ( merge_key , merge_value ) VALUES ( '1' , 'INSERT' ) ;
/* PostgreSQL 9.1 이상 */ WITH upsert AS ( UPDATE ex_merge SET merge_value = 'UPDATE' WHERE merge_key = '1' RETURNING * ) INSERT INTO ex_merge ( merge_key , merge_value ) SELECT '1' , 'INSERT' WHERE NOT EXISTS (SELECT * FROM upsert) ; /* PostgreSQL 9.5 이상 */ -- 조건은 PK, UK 컬럼만 가능 INSERT INTO ex_merge ( merge_key , merge_value ) VALUES ( '1' , 'INSERT' ) ON CONFLICT (merge_key) DO UPDATE SET merge_value = 'UPDATE' ; /* PostgreSQL 15 이상 */ MERGE INTO ex_merge a USING (SELECT 1 AS dummy) b ON a.merge_key = '1' WHEN MATCHED THEN UPDATE SET merge_value = 'UPDATE' WHEN NOT MATCHED THEN INSERT ( merge_key , merge_value ) VALUES ( '1' , 'INSERT' ) ;