본 글에서는 MySQL중복제거 방법 관련 내용을 주로 소개하고 있으니 필요하신 분들은
MySQL 중복제거 방법
[초급] 중복 행이 거의 없음
별도 사용 확인 후 삭제하세요. 수동으로 한 줄씩.
[중급] 단일 필드의 반복을 기반으로 한 중복 제거
예: id 필드의 중복 제거
사용법: id의 반복 필드 값을 가져오고, 동일한 id 필드가 있는 행을 사용합니다. 찾아서 다른 데이터 필드를 비교한 후 가장 작은(또는 가장 큰) 필드가 있는 행을 제외한 모든 중복 행을 삭제합니다. 일반적으로 기본 키의 값은 고유한 값이어야 하고 동일해서는 안 되므로 비교를 위해 기본 키를 사용합니다.
id name 1 a 1 b 2 c 2 a 3 c
결과:
id name 1 a 2 a
작업:
delete from a_tmp where id in (select * from (select b.id from a_tmp b group by b.id having count(b.id) >1) bb) and name not in (select * from (select min(a.name) from a_tmp a GROUP BY a.id having count(a.id) >1) aa);
참고:
위의 굵은 글씨와 녹색 단어는 별칭이어야 하며 select * from (...) 형식을 사용해야 합니다. 그렇지 않으면 오류가 발생합니다. 보고서:
[고급] 여러 필드에서 반복의 경우 up
date에 대한 대상 테이블 'a_tmp'를 지정할 수 없습니다. 예: ID의 경우 동일한 중복 제거 즉, ID와 이름이 동일한 행은 중복 행으로 계산되고, ID는 동일하지만 이름이 다른 행은 중복되지 않은 행으로 계산됩니다.
사용 방법: 단일 필드와 유사하게 기본 키는 일반적으로 기본 키의 값은 고유한 값이어야 하기 때문에 비교에 사용됩니다.
id name rowid 1 a 1 1 a 2 1 b 3 2 b 4 2 b 5 3 c 6 3 d 7
Result:
id name rowid 1 a 1 1 b 3 2 b 4 3 c 6 3 d 7
Operation:
첫 번째 유형:
delete from a_tmp where (id,name) in (select * from (select b.id,b.name from a_tmp b group by b.id,b.name having count(b.id) >1) bb) and rowid not in (select * from (select min(a.rowid) from a_tmp a group by a.id,a.name having count(a.id) >1) aa);
두 번째 유형:
id와 name 필드의 값을 연결하여 임시 테이블 b_tmp에 삽입합니다. [중급] 단일 필드 판단 및 삭제 방법을 사용할 수 있습니다.
#a_tmp 테이블의 두 필드와 고유 값 필드 사이의 연결 값을 b_tmp 테이블에 삽입
insert into b_tmp select concat(id,name),rowid from a_tmp; #查出需要留下来的行 select id_name,max(rowid) from b_tmp group by id_name having count(id_name)>1; #使用【中级】的方法,或存储过程完成去重的工作
【Ultimate】각 행에는 동일한 데이터의 복사본이 두 개 있습니다
예:
사용법: 전체 행에 대해 데이터는 모두 동일하며 하나의 행을 남겨두고 동일한 행을 모두 삭제하는 데 사용할 수 있는 조건부 제한이 없으므로 SQL 문을 사용하여 삭제할 수 없습니다. 다른 필드는 없습니다. 즉, 필드를 추가하고 자동 증가로 설정한 다음 기본 키로 설정하면 자동으로 상위 값이 추가됩니다.
id name 1 a 1 a 1 b 1 b 2 c 2 c 3 c 3 c
결과:
id name rowid 1 a 1 1 b 3 2 c 5 3 c 7
작업:
자체 증가 필드를 추가하고 임시로 기본 키로 설정합니다.
위의 [중급] 및 [고급] 방법을 사용하세요.
위 내용은 MySQL 중복 제거 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!