2011-05-11 7 views
2

거대한 테이블이 있지만 중복 된 항목이 많습니다. 이 테이블에는 10,000 개 이상의 항목이 있으며 수동으로 찾아서 삭제하지 않고 중복 항목을 제거하려고합니다. 이 문제에 대한 해결 방법을 알려 주시면 알려주세요.DB의 중복 항목

+0

중복 된 ID 또는 특정 필드 또는 ...? –

+0

ID가 고유합니까? 그들은 모든면에서 동일합니다. 그들은 어떻게 저장 되었습니까? – soandos

답변

1

중복 행을 제거하는 여러 가지 방법이 있으며 중복 행을 사용하는 시나리오에 따라 완전히 다릅니다. 당신은 모든 중복 행이 삭제 점점 후 인덱스를 제거 할 수 있습니다

alter ignore table products add unique index `unique_index` (product_name); 

: 가장 간단한 방법은 제품 이름 필드에 고유 인덱스를 만드는 테이블을 변경하는 것입니다

alter table products drop index `unique_index`; 

날이 있다면 알려 주시기 바랍니다 문제를 해결합니다. 그렇지 않다면 그 대신 다른 해결책을 줄 수 있습니다.

3

SELECT DISTINCT INTO TempTable을 사용하고 원래 테이블을 삭제 한 다음 임시 테이블의 이름을 바꿀 수 있습니다.

나중에 이러한 일이 발생하지 않도록 기본 키와 고유 키를 추가해야합니다.

3

전체 행 중복을 시도하십시오.

select distinct * into mytable_tmp from mytable 
drop table mytable 
alter table mytable_tmp rename mytable 
2

귀하의 요구 사항을 해결하는 데 도움이 될 것 같습니다. 테이블 (푸) 기본 키 필드를 임시 테이블에

첫 번째 단계

저장 키 값이있는 경우에는 중복 이메일 ID를 삭제하려면

는 절 에 의해 그룹에서 고유 한 조건을 제공 절에 의해 그룹에서 이메일 ID를주고 같은 SELECT 절에 기본 키 이름을 두 분 (기본 키) 또는 최대 (기본 키)

이 uniquefields BY foo는 그룹에서 임시 테이블 TEMPTABLE AS SELECT 분 (기본 키)을 생성;

두 번째 단계

호출 아래의 문장을 삭제하고 기본 키가 NOT IN (SELECT TEMPTABLE * FROM) WHERE foo는에서 삭제

테이블 이름과 기본 키 열을 제공;

은 쿼리 분석기 또는 db 도구에서 결합 된 쿼리를 모두 실행합니다.

테이블 (푸) 기본 키가

을 제기하지 않는 경우

1 단계

AS SELECT 표 temp_table을 CREATE * 필드 또는 fileds BY foo는 그룹에서;

단계 2

foo;

단계 3

INSERT INTO foo select * from temp_table;

1

그룹에 둘 이상의 열을 추가 할 수 있습니다. I.E.

SELECT * from tableName GROUP BY prod_name HAVING count(prod_name) > 1 

고유 제품이 표시됩니다. 새 테이블에 덤프하고 기존 테이블을 삭제할 수 있습니다.