본문 바로가기
DB 지식

[SQL Server / MS-SQL] 중복 데이터 삭제 /PK 없는 테이블 중복 데이터 제거

by 몽일! 2024. 1. 17.

데모 사이트 구축 중 MS-SQL DB에 테스트 데이터를 삽입하다 같은 데이터를 2번 넣어버려서 잘못 넣은 중복 데이터를 삭제하기 위해 해당 방법을 찾게 되었다.

본론으로 바로 들어가자면

MS-SQL에서 중복되는 칼럼을 삭제하는 쿼리문은 아래로,

DELETE tb
  FROM (

          SELECT 
                idx = ROW_NUMBER() OVER (
                           PARTITION BY idx ORDER BY idx )
            FROM testtable
       ) tb
 WHERE tb.idx > 1;

 select*from testtable order by idx desc;

idx는 primary key 값으로 원래는 중복되면 안 되지만 데이터를 잘 못 넣었기 때문에 중복되는 값이 들어있는 칼럼으로
이를 기준으로 2개 이상인 row를 삭제 할 것이다.

 

여기서 

          SELECT 
                idx = ROW_NUMBER() OVER (
                           PARTITION BY idx ORDER BY idx )
            FROM testtable

는 


테이블에 중복되는 데이터가 각 
가 



라고 데이터가 들어있다고 하면 각 2개씩으로 중복이고

ROW_NUMBER()  는 행 번호를 생성하는 함수로  같은 값의 데이터에 행 번호를 매겨 출력하게 하고

저 코드의 결과는 아래와 같다.
1
2
1
2

결국 저코드의 결과값(행번호)이 1보다 크면 삭제가되는 즉, 중복되는 데이터 중 1개만 남기고 삭제하는 쿼리문인것이다.