IT/SQL

[SQL] Postgresql에서 Oracle의 Merge into~ 구문 사용하기

snapcoder 2024. 6. 27. 19:22
728x90
반응형
SMALL

오라클에서의 Merge into~ 구문처럼

insert를 하고싶은데 이미 데이터가 있으면 update를 해야되는

즉, insert와 update를 동시에 실행시켜야 하는 니즈가 생기기 마련

 

 

그러나 postgresql 에서는? Oracle의 Merge into~ 구문을 사용할 수 없다.

대신 다른 방법이 존재한다.

 

원리는 간단하다.

임시 테이블 + Returning * 구문을 활용하면 끝.
심지어 insert/delete/update/select 원하는 순서로 동시 실행 가능하다.

ex) 쿼리 한개로 ABC를 select를 하고 C를 delete하고 B만 update할 수가 있다

 

예시 쿼리1은 다음과 같다.

sesert에서 특정 데이터 선택하고

upsert에서 선택된 데이터만 특정컬럼 업데이트해주고 (Returning * 으로 결과값 반환시켜줌)

desert에서 업데이트 된 데이터의 맵핑된 다른 테이블의 데이터를 지워주고

마지막으로 결과 조회해준 케이스

 

예시 쿼리2는 다음과 같다.

재귀쿼리 하나 뽑아주고

특정 테이블에서 재귀결과에 없는 데이터는 삭제해주고

삭제한 데이터를 returning으로 받아서 삽입해주는데

not exists 활용해서 키값이 아닌 컬럼에 대한 중복체크 후 아닌 경우에만 삽입

결론.

postgresql에서

임시테이블 + returning * 구문 조합은 그저 최강이다.

 

이 방법이 아니었다면,

비즈니스 로직 서비스딴에서 Select문 날리고 받아서

List<String>으로 반복문돌려서 특정조건 추려내고

다시 또 Delete문 날리고 받고...

DB부하도 늘어나고....

비효율적이고 재미 없어진달까

 

 

한방에 깔끔하고 고급지게 하자 한방에~

728x90
반응형
LIST