사용자 도구

사이트 도구


기술문서:레퍼런스:쿼리:응용:merge_query

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:응용:merge_query [2025/02/27 16:39]
carlito76
기술문서:레퍼런스:쿼리:응용:merge_query [2025/11/27 11:53] (현재)
carlito76
줄 6: 줄 6:
 ====== Merge Query ====== ====== Merge Query ======
  
-^  물리명  ^  논리명  ^  타입  ^  KEY  ^ +<note tip> 
-| 시퀀스 | seq | 숫자 | PK | +최소 지원 버전은 약간의 차이가 있을 수 있습니다. 
-| 제목 | title | 문자 | | +</note>
-| 내용 | content | 문자 | |+
  
 +===== 테이블 명세 =====
 +^  물리명  ^  논리명  ^  타입  ^  길이  ^  KEY  ^
 +| 머지 키 | merge_key | 문자형 | | PK |
 +| 머지 값 | merge_value | 문자형 | 100 | |
 +
 +===== SQL 스크립트 =====
 <sxh sql; gutter: true; title: DDL;> <sxh sql; gutter: true; title: DDL;>
--- MySQL/MariaDB & MSSQL & PostgreSQL 
-CREATE TABLE ex_merge ( 
- seq BIGINT NOT NULL PRIMARY KEY, 
- title VARCHAR(100) NOT NULL, 
- content TEXT NOT NULL 
-); 
- 
--- Oracle/Tibero 
 CREATE TABLE ex_merge ( CREATE TABLE ex_merge (
- seq NUMBER NOT NULL PRIMARY KEY, + merge_key VARCHAR(100) NOT NULL PRIMARY KEY, 
- title VARCHAR(100) NOT NULL, + merge_value VARCHAR(100) NOT NULL
- content CLOB NOT NULL+
 ); );
 </sxh> </sxh>
줄 29: 줄 25:
 ===== MySQL/MariaDB ===== ===== MySQL/MariaDB =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- MySQL 4.1 이상+/* 
 + MySQL 4.1 이상/MariaDB 5.1 이상 
 +*/
 -- 조건은 PK, UK 컬럼만 가능 -- 조건은 PK, UK 컬럼만 가능
 INSERT INTO ex_merge ( INSERT INTO ex_merge (
- seq + merge_key 
-title +merge_value
- , content+
 ) VALUES ( ) VALUES (
- 1 + '1' 
- , '제목 INSERT+ , 'INSERT'
- , '내용 INSERT'+
 ) )
 ON DUPLICATE KEY ON DUPLICATE KEY
 UPDATE UPDATE
- title = '제목 UPDATE' + merge_value = 'UPDATE'
- , content = '내용 UPDATE'+
 ; ;
 </sxh> </sxh>
줄 49: 줄 44:
 ===== MSSQL ===== ===== MSSQL =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- MSSQL 2008 이상+/* 
 + MSSQL 2008 이상 
 +*/
 MERGE INTO ex_merge a MERGE INTO ex_merge a
  USING (SELECT 1 AS dummy) b  USING (SELECT 1 AS dummy) b
- ON a.seq = 1+ ON a.merge_key '1'
 WHEN MATCHED THEN WHEN MATCHED THEN
  UPDATE SET  UPDATE SET
- title = '제목 UPDATE' + merge_value = 'UPDATE'
- , content = '내용 UPDATE'+
 WHEN NOT MATCHED THEN WHEN NOT MATCHED THEN
  INSERT (  INSERT (
- seq + merge_key 
-title +merge_value
- , content+
  ) VALUES (  ) VALUES (
- 1 + '1' 
- , '제목 INSERT+ , 'INSERT'
- , '내용 INSERT'+
  )  )
 ; ;
줄 72: 줄 66:
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- Oracle 9i 이상+/* 
 + Oracle 9i 이상/Tibero 6 이상 
 +*/
 MERGE INTO ex_merge MERGE INTO ex_merge
  USING DUAL  USING DUAL
- ON (seq = 1)+ ON (merge_key '1')
 WHEN MATCHED THEN WHEN MATCHED THEN
  UPDATE SET  UPDATE SET
- title = '제목 UPDATE' + merge_value = 'UPDATE'
- , content = '내용 UPDATE'+
 WHEN NOT MATCHED THEN WHEN NOT MATCHED THEN
  INSERT (  INSERT (
- seq + merge_key 
-title +merge_value
- , content+
  ) VALUES (  ) VALUES (
- 1 + '1' 
- , '제목 INSERT+ , 'INSERT'
- , '내용 INSERT'+
  )  )
 ; ;
줄 95: 줄 88:
 ===== PostgreSQL ===== ===== PostgreSQL =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- PostgreSQL 9.5 미만+/* 
 + PostgreSQL 9.1 이상 
 +*/
 WITH upsert AS ( WITH upsert AS (
- UPDATE SET + UPDATE ex_merge SET 
- title = '제목 UPDATE' + merge_value = 'UPDATE'
- , content = '내용 UPDATE'+
  WHERE  WHERE
- seq = 1+ merge_key '1'
  RETURNING *  RETURNING *
 ) )
 INSERT INTO ex_merge ( INSERT INTO ex_merge (
- seq + merge_key 
-title +merge_value
- , content+
 ) )
 SELECT SELECT
- 1 + '1' 
- , '제목 INSERT+ , 'INSERT'
- , '내용 INSERT'+
 WHERE WHERE
  NOT EXISTS (SELECT * FROM upsert)  NOT EXISTS (SELECT * FROM upsert)
 ; ;
  
--- PostgreSQL 9.5 이상+/* 
 + PostgreSQL 9.5 이상 
 +*/
 -- 조건은 PK, UK 컬럼만 가능 -- 조건은 PK, UK 컬럼만 가능
 INSERT INTO ex_merge ( INSERT INTO ex_merge (
- seq + merge_key 
-title +merge_value
- , content+
 ) VALUES ( ) VALUES (
- 1 + '1' 
- , '제목 INSERT+ , 'INSERT'
- , '내용 INSERT'+
 ) )
-ON CONFLICT (seq)+ON CONFLICT (merge_key)
 DO UPDATE SET DO UPDATE SET
- title = '제목 UPDATE' + merge_value = 'UPDATE'
- , content = '내용 UPDATE'+
 ; ;
  
--- PostgreSQL 15 이상+/* 
 + PostgreSQL 15 이상 
 +*/
 MERGE INTO ex_merge a MERGE INTO ex_merge a
  USING (SELECT 1 AS dummy) b  USING (SELECT 1 AS dummy) b
- ON a.seq = 1+ ON a.merge_key '1'
 WHEN MATCHED THEN WHEN MATCHED THEN
  UPDATE SET  UPDATE SET
- title = '제목 UPDATE' + merge_value = 'UPDATE'
- , content = '내용 UPDATE'+
 WHEN NOT MATCHED THEN WHEN NOT MATCHED THEN
  INSERT (  INSERT (
- seq + merge_key 
-title +merge_value
- , content+
  ) VALUES (  ) VALUES (
- 1 + '1' 
- , '제목 INSERT+ , 'INSERT'
- , '내용 INSERT'+
  )  )
 ; ;
 </sxh> </sxh>
 +
 +{{tag>"쿼리" "Query" "응용"}}