본문 바로가기

DataBase

[MSSQL] DB 데이터 중복된 값으로 이루어진 튜플 ( 행 ) 삭제하는 쿼리

반응형

WITH CTE AS (
    SELECT [brd_num],
           ROW_NUMBER() OVER (PARTITION BY [중복된 열 값] ORDER BY (SELECT NULL)) AS RowNum
    FROM [테이블 명]
)
DELETE FROM CTE WHERE RowNum > 1;

WITH CTE AS (...): 이 부분은 Common Table Expression (CTE)를 정의합니다. CTE는 일시적으로 정의된 테이블로, 이 경우에는 중복된 {열}을 가진 행에 대한 정보를 포함합니다.

SELECT 중복된 {열}, ROW_NUMBER() OVER (PARTITION BY 중복된 {열} ORDER BY (SELECT NULL)) AS RowNum FROM 테이블: 이 부분은 CTE에 저장될 데이터를 선택합니다. ROW_NUMBER() 함수는 각 행에 대해 고유한 번호를 할당하며, PARTITION BY 중복된 {열} 구문은 brd_num을 기준으로 각각의 그룹을 형성하여 번호를 할당합니다. ORDER BY (SELECT NULL)는 순서를 지정하지 않음을 나타냅니다.

DELETE FROM CTE WHERE RowNum > 1;: 이 부분은 CTE에서 RowNum이 1보다 큰 행을 삭제합니다. 여기서 RowNum이 1보다 크다는 것은 중복된 {열} 값을 가진 행 중에서 최소한 두 번째로 나타난 행들을 의미합니다.

쉽게 말해, CTE를 사용하여 각 중복된 {열}그룹에서 첫 번째로 나타난 행은 남기고, 나머지 중복된 행들을 삭제합니다. 따라서 해당 테이블에서 각 {열} 값에 대해 중복된 행이 하나만 남도록 합니다.

반응형