데모 사이트 구축 중 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개만 남기고 삭제하는 쿼리문인것이다.
'DB 지식' 카테고리의 다른 글
[mysql Workbench| maria db] MySQL에 엑셀(.csv) 데이터 넣기 (0) | 2024.01.19 |
---|---|
[mysql Workbench| maria db ] 데이터 백업 방법 / 테이블 생성 스크립트/ data export / dump / (2) | 2024.01.18 |
mssql 날자형식 지정/ 데이터 형식지정 /날짜 포맷 (1) | 2024.01.03 |
mssql 에서 mysql 에서의 Limit 처럼 사용하는 방법 (1) | 2024.01.03 |
[mysql기초] 데이터베이스 개념 (0) | 2023.04.18 |