[출처] MSSQL 2000 중복값 제거 방법 입니다.|작성자 네멋대로
안녕하세요 데이터를 복사하면서 중복값 검사없이 데이터를 복사해와서 고생하시는 분들을 위해 포스트를 작성합니다.
우선 해당 DB는 MS-SQL 2000입니다.
그러므로, rowID 나 ROWNUM 같은 것을 지원하지 않습니다. 오라클과 MSSQL2005부터 지원한다는군요.
▣ 장점!!
1. 원본테이블과, 중복된 값이 있는 현재 테이블의 값들의 손상이 전혀없다!!(중복파일만 삭제)
2. 간편 하면서도 금방 끝낸다
3. 네이버 지식인에서 안가르쳐주거나, 이상한 헛소리를 해서 짜증난다! 테스트 테이블일 지언정 다 지우고 다시 가져오기 싫다!!!
▣ 증상
우선 테이블 원본입니다.
이 값들을 화끈하게 8번 중복 시켜 버리겠습니다.
▣ 중복값 삭제 방법
1. 엔터프라이즈 메니저를 실행
2. 해당 테이블에서 마우스 오른쪽 을 눌러 [테이블 디자인]을 선택합니다.
3. 테이블 디자인에서 [컬럼]을 하나 추가합니다.
4. [del_num] 이라고 예제에서는 이름을 지었습니다. INT 로 하시고, NULL 허용 체크 해제 합니다.
5. 속성에는 ID를 [YES]로 변경하시면, 시작값과 증가값을 설정하실수 있습니다. 시작값 1, 증가값 1로 설정하였습니다. 마음대로 설정해도 상관없습니다.
6. 보시면 임의 값이 삽입되어 있는것을 확인 하실 수 있습니다.
7. 쿼리 분석기에서 다음과 같이 쿼리문을 씁니다. 이미지를 보시면 아시겠지만, 저는 다음과 같이 쿼리문을 작성하였습니다.
예제)
select * from 테이블이름
order by [추가된컬럼]
실행)
select [del_num] as 추가된컬럼, * from [book]
order by [del_num] asc
8. 이제 중복된 값을 1개만 남기고 전부 삭제 해 보겠습니다. 쿼리는 다음과 같습니다.
예제)
delete 테이블이름 where [추가된컬럼]
in (select 테이블별명A.[추가된컬럼] from 테이블이름 테이블별명A, 테이블이름 테이블별명B where 테이블별명A.[추가된컬럼] < 테이블별명B.[추가된컬럼]
and 테이블별명A.[중복컬럼1]=테이블별명B.[중복컬럼1] and 테이블별명A.[중복컬럼2]=테이블별명B.[중복컬럼2] and .....)
실행)
delete book where del_num
in (select T1.del_num from book T1, book T2 where T1.del_num < T2.del_num
and T1.BID=T2.BID)
9. 결과는 다음과 같습니다.
10. 이제 추가했던 컬럼을 지웁니다. 엔터프라이즈 메니저로 가서 [테이블디자인]을 선택합니다. 그리고 해당 컬럼을 삭제후 저장합니다.
11. 마지막으로 확인합니다.
이상입니다.
참 쉽죠 ^^
이 포스트를 쓴 이유가... 대부분의 답변자들이 너무나 쉽게 DB를 생각하시는 것 같습니다.
MS-SQL2000을 쓰시는분들이 의외로 많기 때문에 MS-SQL2005 나 오라클 처럼 지원 안되는게 많습니다.
또한 테스트 테이블이라고 해도 완전히 삭제후 다시 값을 채우는 것은 꺼림직하기도 하구요, 그게 만약 상용서버에서 중복이 일어났을경우는 빠른 대처를 위해서 데이터를 전부 리셋할 수 없을때가 있습니다만, 이런 상황을 대부분 고려하지 않고 답변을 올리는 답변자가 많았기 때문입니다.
아무쪼록 속타고 머리 아픈 이런 일을 겪고 계시는 여러분들에게 도움이 되었으면 합니다.
그럼 이만. [출처] MSSQL 2000 중복값 제거 방법 입니다.|작성자 네멋대로
'Study > mssql' 카테고리의 다른 글
MSSQL 백업 복원(복구)시 계정 오류 (1) | 2011.07.11 |
---|---|
MSSQL2005 외부접속문제. (0) | 2010.05.24 |
MSSQL 2005 로그파일 축소 (0) | 2010.02.18 |
sql injection 을 해결해보자. (0) | 2010.02.04 |
MSSQL EM에서 필드값 NULL로 초기화 시키기(update null) (0) | 2010.02.04 |