SQL Server 테이블 중복 행을 삭제하는 방법(Delete Duplicate Rows)

데이터베이스 테이블 작업을 하다 보면 중복 행을 처리해야 하는 경우가 있습니다.

SQL Server migration 작업을 하거나 대용량 테이블을 처리하는 작업을 할 때 테이블의 중복 행이 예기치 못한 문제를 일으키기도 합니다.
이럴 때는 데이터베이스 테이블의 중복 행 삭제 작업을 먼저 처리해 주기도 합니다.

일반적으로 Database Table을 생성할 때 Primary key를 지정해서 생성하므로 중복되는 행이 존재하는 경우가 그렇게 많지는 않습니다.

하지만 Primary key 컬럼의 데이터는 달라 완전히 중복 행은 아니지만 몇 가지 일반 컬럼의 데이터가 중복되는 행을 삭제해야 하는 경우도 생길 때가 있습니다. 그리고 P.K를 미처 지정하지 않아 불필요한 중복 행이 계속해서 생겨 있을 때도 중복 행을 일괄 삭제하는 작업을 하기도 합니다.

이번 글에서는 SQL Server 테이블 중복 행을 삭제하는 방법(Delete Duplicate Rows)에 대해 알아보겠습니다.

SQL Server의 기존 테이블에서 중복된 행 삭제 시나리오

아래 예제에서 Name(이름)과 Department(부서)가 저장되는 employees 테이블이 있습니다.

①번의 쿼리문 : SELECT Name, Department FROM employees;

  • 모두 8명의 사원 목록이 조회 됩니다.

②번의 쿼리문 : SELECT Name, Department,
ROW_NUMBER() OVER(PARTITION BY Name, Department ORDER BY Name)
FROM employees;

  • ROW_NUMBER() 함수를 사용하여 동일한 Name, Department 컬럼 데이터에 대해 행 수를 표시해 주었습니다.
SQL Server 테이블 중복 행을 삭제하는 방법(Delete Duplicate Rows) 1

SQL Server의 기존 테이블에서 중복된 행 삭제

▼ SQL Server의 테이블에서 중복되는 행을 삭제하기 위한 쿼리 문입니다.

WITH duplicates (Name, Department, duplicate_count) AS (
  SELECT
    Name,
    Department,
    ROW_NUMBER() OVER(PARTITION BY Name, Department ORDER BY Name)
  FROM employees
)
DELETE from duplicates
WHERE duplicate_count > 1;
 

▼ 위 쿼리 문을 실행한 뒤 employees 테이블을 SELECT 했을 때의 결과입니다.

SQL Server 테이블 중복 행을 삭제하는 방법(Delete Duplicate Rows) 2

중복된 행이 모두 삭제된 것을 확인할 수 있습니다.

마무리

SQL Server의 테이블에서 중복 된 행을 삭제하는 작업은 종종 발생하는 작업입니다.

여기에서 설명하는 방법을 활용해서 데이터베이스 테이블의 중복 행을 간단하게 삭제해 보시기 바랍니다.





이 글이 도움이 되었기를 바랍니다. ^-^
댓글로 흔적을 남겨 주세요.

답글 남기기