IT/DBMS

[Oracle] Oracle 중복데이터 제거(feat. delete from table + group by having)

알 수 없는 사용자 2022. 11. 29. 06:27
반응형

목차

     

    Oracle 중복된 데이터만 조회😉

    select from table group by having절로 중복 데이터만 조회하는 건 아래처럼 조회하면 된다.

    SELECT NAME, sum(1) hap 
    FROM TMP_220512 t 
    GROUP BY NAME
    HAVING sum(1) > 1
    ;

    결과는 아래처럼 name이 1개 이상인 중복데이터가 조회된다.

    문득 위의 중복된 데이터만 제거하고 싶어서 해봤다.

    아래처럼 쿼리를 날리면 된다.(더 좋은 방법이 있을 수도 있다.)

    테이블 상태(인덱스 존재 등)에 따라 오래 걸릴 수도 있다.

     

    중복된 데이터만 제거😄

    먼저 group by having절로 중복데이터가 1개 이상인 데이터만 뽑고

    그걸 서브쿼리에 넣은 후 DELETE문으로 삭제

    DELETE FROM TMP_220512 t2 
    WHERE NAME IN
    (
    SELECT NAME 
    FROM TMP_220512 t 
    GROUP BY NAME 
    HAVING sum(1) > 1
    )
    ;

    내가 잊어버리지 않기 위해서 메모

    반응형