본문 바로가기
  • 읽고보고쓰고
PROGRAMMING/Database

[ORACLE] 동일 상품정보 제거하기

by 체리그루브 2022. 12. 14.
728x90

미처 UNIQUE INDEX를 잡아놓지 않은 덕분인지, 개발자가 같은 상품을 여러번 등록하는 실수를 했다. 그리고 DB는 그 모든 내용을 저장해 주고 있었다. 집계수량이 어긋나서 확인해 보니 중복 상품 다량 발견. (일단 개발계라 고치면 된다.)

따라서 중복되는 상품을 제거해 줘야 했고, PARTITION BY를 활용하여 다음의 쿼리로 제거 했다. 처음에 등록한 것 빼고는 모두 삭제처리하는 쿼리다.

DELETE FROM TB_PRD 
WHERE PRD_REQ_NO IN (
    SELECT PRD_REQ_NO FROM (
        SELECT  ROW_NUMBER() OVER(PARTITION BY ETPS_CD, PRD_ID ORDER BY ETPS_CD, PRD_ID, MDF_DTM ) RN
                ,PRD_REQ_NO
        FROM TB_PRD
    )
    WHERE RN > 1
)
;


늦게나마 일단 UNIQUE INDEX를 걸어둬서 이런 사고를 미연에 방지해야겠다.

CREATE UNIQUE INDEX IDX_IF_T_PRD_M ON T_PRD_M (PRD_ID, ETPS_CD) 
TABLESPACE PTNR_DATA;

 


※ 위 쿼리들은 현재 Live 에서 사용하는 것을 변형한 것임을 밝혀둔다.

728x90

댓글