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 |