IT story/db

[postgresql] upsert문(merge문)

자랑이다 2022. 9. 26. 14:39
728x90
반응형

Oracle에서 쓰던 merge문.

Postgre의 upsert문과 같은 기능을 가진다. 

 

Data가 존재하면 update, 존재하지 않으면 insert. 

 

WITH UPSERT AS (
   UPDATE AA
      SET 
         aa_name = I.name,
         aa_code = I.code
      FROM BB as I 
      WHERE aa_id = I.id AND I.seq = #{seq}
      returning  *
   )
   INSERT INTO AA
      ( aa_name,
         aa_code.  )
      SELECT 
         I.name, I.code
      FROM BB as I
      WHERE I.seq = #{seq} AND (select count(aa_id) from AA where aa_id = I.id ) <= o

 

AA 테이블의 데이터 한 건에 대하여

BB 테이블의 여러건과 비교하여 upsert 치는 sql문. 

 

마지막 조건문에서 is not 을 사용했었으나

Postgresql에서는 is not 이 안먹혔다. (조건이 안걸림)

배치를 돌며 BB 테이블의 데이터가 삭제되는 경우여서

Count 로 처리. 

 

 

728x90

'IT story > db' 카테고리의 다른 글

[postgresql] auto increment  (0) 2022.09.29
[ORACLE] [POSTGRESQL] oracle to postgresql  (0) 2021.08.24