MSSQL 중복 확인 및 데이타 삭제
페이지 정보
본문
쿼리문을 이용해서 간단한 중복 데이타 삭제 쿼리를 만들어 보겠습니다.
1. 중복 확인
select Max(id컬럼) as seq, 컬럼1, count(*) as cnt from `테이블` group by 컬럼1 having count(*) > 1
2. 중복 데이타 중 가장 큰 값을 제외한 데이타를 가져오는 쿼리문
select a.id컬럼 as seq from `테이블` A inner join ( select MAX(id컬럼) as seq, 컬럼1, count(*) as cnt from `테이블`
group by 컬럼1 having count(*) >1) B on A.컬럼1 = B.컬럼1 and A.seq <> B.seq
위의 쿼리문은 중복 데이타의 id컬럼 값중 가장 큰 값을 제외한 id컬럼 값들 중에 A.컬럼1 와 B.컬럼1 가 같은 것을 select 하라는 뜻입니다.
한눈에 파악 가능하실 겁니다. 이로서 중복 데이타 중 가장 큰 값을 제외한 데이타를 가져오는 쿼리문은 끝났습니다.
3. 중복데이터 삭제
id컬럼은 AUTO_INCREMENT 로, 기본 키 값을 증가의 자동 시퀀스를 생성하는 키입니다
delete from `테이블` where seq IN (
select a.id컬럼 as seq from `테이블` A inner join ( select MAX(id컬럼) as seq, 컬럼1, count(*) as cnt from `테이블`
group by 컬럼1 having count(*) >1) B on A.uid = B.uid and A.seq <> B.seq )
참고자료
http://www.webmadang.net/database/database.do?action=read&boardid=4001&seq=6
1. 중복 확인
select Max(id컬럼) as seq, 컬럼1, count(*) as cnt from `테이블` group by 컬럼1 having count(*) > 1
2. 중복 데이타 중 가장 큰 값을 제외한 데이타를 가져오는 쿼리문
select a.id컬럼 as seq from `테이블` A inner join ( select MAX(id컬럼) as seq, 컬럼1, count(*) as cnt from `테이블`
group by 컬럼1 having count(*) >1) B on A.컬럼1 = B.컬럼1 and A.seq <> B.seq
위의 쿼리문은 중복 데이타의 id컬럼 값중 가장 큰 값을 제외한 id컬럼 값들 중에 A.컬럼1 와 B.컬럼1 가 같은 것을 select 하라는 뜻입니다.
한눈에 파악 가능하실 겁니다. 이로서 중복 데이타 중 가장 큰 값을 제외한 데이타를 가져오는 쿼리문은 끝났습니다.
3. 중복데이터 삭제
id컬럼은 AUTO_INCREMENT 로, 기본 키 값을 증가의 자동 시퀀스를 생성하는 키입니다
delete from `테이블` where seq IN (
select a.id컬럼 as seq from `테이블` A inner join ( select MAX(id컬럼) as seq, 컬럼1, count(*) as cnt from `테이블`
group by 컬럼1 having count(*) >1) B on A.uid = B.uid and A.seq <> B.seq )
참고자료
http://www.webmadang.net/database/database.do?action=read&boardid=4001&seq=6
댓글목록
등록된 댓글이 없습니다.