MySQL 중복 확인 및 데이타 삭제
페이지 정보
본문
중복데이터가 몇개이상인 것을 검색하고 싶을 때
중복데이터를 추출 할 때 group by having절을 사용해서 검색을 합니다.
1. 중복 확인
select *, count(*) from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1;
select *, count(*) as cnt from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1;
select A.* from `테이블` A, (select 컬럼1 from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1) B where A.컬럼1 = B.컬럼1
select * from `테이블` where 컬럼1 IN ( select 컬럼1 from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1 );
2. 중복데이터 삭제
id컬럼은 AUTO_INCREMENT 로, 기본 키 값을 증가의 자동 시퀀스를 생성하는 키입니다
2-1. 해당 테이블에 유일값(id) 컬럼이 있는 경우
중복일 경우 id컬럼 값을 이용하여 중복 레코드 중 가장 낮은 값(오래된)을 포함한 레코드를 제거합니다
delete from `테이블` where id컬럼 IN (select * from (select MIN(id컬럼) from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1) as tmp );
2-2. 해당 테이블에 유일값(id) 컬럼이 없는 경우
# rownum값 초기화
set @rownum:=0;
# rownum값을 이용해 id 컬럼을 만들어서 새로운 테이블 생성
create table `테이블_copy` as select @rownum:=@rownum+1, * from `테이블';
# 위와 동일
delete from `테이블` where id컬럼 IN (select * from (select MIN(id컬럼) from `테이블` group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1) as tmp );
rownum 을 이용해서 id컬럼이 추가된 새로운 테이블을 만들고, 2-1과 동일한 방법으로 중복을 없앨 수 있습니다
delete from `테이블` where 컬럼1 IN ( select A.컬럼1 from ( select 컬럼1 from `테이블` group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > n ) A );
참고자료
https://funyphp.com/archive/mysql/18
https://hyang2data.tistory.com/3
https://jeffrey-oh.tistory.com/321
https://yrohh.tistory.com/395
https://deersoul6662.tistory.com/224
중복데이터를 추출 할 때 group by having절을 사용해서 검색을 합니다.
1. 중복 확인
select *, count(*) from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1;
select *, count(*) as cnt from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1;
select A.* from `테이블` A, (select 컬럼1 from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1) B where A.컬럼1 = B.컬럼1
select * from `테이블` where 컬럼1 IN ( select 컬럼1 from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1 );
2. 중복데이터 삭제
id컬럼은 AUTO_INCREMENT 로, 기본 키 값을 증가의 자동 시퀀스를 생성하는 키입니다
2-1. 해당 테이블에 유일값(id) 컬럼이 있는 경우
중복일 경우 id컬럼 값을 이용하여 중복 레코드 중 가장 낮은 값(오래된)을 포함한 레코드를 제거합니다
delete from `테이블` where id컬럼 IN (select * from (select MIN(id컬럼) from `테이블` where 조건컬럼='값' group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1) as tmp );
2-2. 해당 테이블에 유일값(id) 컬럼이 없는 경우
# rownum값 초기화
set @rownum:=0;
# rownum값을 이용해 id 컬럼을 만들어서 새로운 테이블 생성
create table `테이블_copy` as select @rownum:=@rownum+1, * from `테이블';
# 위와 동일
delete from `테이블` where id컬럼 IN (select * from (select MIN(id컬럼) from `테이블` group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > 1) as tmp );
rownum 을 이용해서 id컬럼이 추가된 새로운 테이블을 만들고, 2-1과 동일한 방법으로 중복을 없앨 수 있습니다
delete from `테이블` where 컬럼1 IN ( select A.컬럼1 from ( select 컬럼1 from `테이블` group by 컬럼1, 컬럼2, ... 컬럼n having count(*) > n ) A );
참고자료
https://funyphp.com/archive/mysql/18
https://hyang2data.tistory.com/3
https://jeffrey-oh.tistory.com/321
https://yrohh.tistory.com/395
https://deersoul6662.tistory.com/224
댓글목록
등록된 댓글이 없습니다.