본문 바로가기
나혼자 웹사이트 만들기/DB

[ORACLE] 중복 데이터 삭제 쿼리

by coldbrew_ 2023. 1. 13.
반응형

Oracle에서는 DELETE 문을 사용하여 테이블에서 중복 행을 제거할 수 있습니다.

이를 수행하는 한 가지 방법은 INNER JOIN 절 및 ROWID 의사 열과 함께 하위 쿼리를 사용하는 것입니다.

데이터 중복제거 예시

다음은 DELETE 문을 사용하여 "employees"라는 테이블에서 중복 행을 제거하는 방법의 예입니다.

 

1
2
3
4
5
6
DELETE FROM employees
WHERE ROWID NOT IN (
    SELECT MIN(ROWID)
    FROM employees
    GROUP BY column1, column2, ...
);
cs

이 쿼리는 ROWID 의사 열을 사용하여 중복 행을 식별하고 MIN 함수를 사용하여 각 중복 세트 중 하나만 유지합니다. 쿼리에는 지정된 열(column1, column2 등)을 기준으로 행을 그룹화하는 GROUP BY 절도 포함됩니다. 이는 쿼리가 해당 열의 각 중복 값 집합에 대해 하나의 행만 유지함을 의미합니다.

자체 조인 및 상관 하위 쿼리를 사용하여 중복 행을 삭제할 수도 있습니다.

1
2
3
4
5
6
7
8
DELETE FROM employees a
WHERE (a.column1, a.column2, ...) IN (
    SELECT column1, column2, ...
    FROM employees
    WHERE column1 = a.column1 AND column2 = a.column2 AND ...
    GROUP BY column1, column2, ...
    HAVING COUNT(*> 1
);
cs

이 쿼리는 열 값을 기준으로 중복 행을 제거합니다. 해당 열의 각 중복 값 집합에 대해 하나의 행을 유지합니다.

위의 쿼리를 수행하기 전에 테이블을 백업하고 먼저 작은 데이터 세트에서 테스트하여 예상대로 작동하는지 확인하는 것이 중요합니다.

 

(추가)테이블 중복제거 활성화/비활성화 명령어

 

Oracle에서 테이블 중복 제거를 활성화하는 명령은

"ALTER TABLE [테이블 이름] ENABLE ROW DUPLICATE CONSTRAINTS"

 

입니다.

테이블에 대한 중복 제거를 비활성화하는 명령은

"ALTER TABLE [테이블 이름] DISABLE ROW DUPLICATE CONSTRAINTS"

입니다.

반응형

댓글