요구 사항: 이름/이메일/카드 번호 필드를 기반으로 사용자 테이블에서 중복 데이터 제거
#🎜🎜 #아이디어: 그룹별 방법을 사용하여 '중복' 데이터를 쿼리하고 임시 테이블에 데이터를 저장한 다음 임시 테이블의 데이터를 지정된 테이블에 저장합니다.# 🎜🎜#
오해와 해결 방법:그룹별 방법은 일부 필드(중복 없이 지정된 필드)만 얻을 수 있으며, 완전한 데이터를 한 번에 얻을 수는 없지만 그룹은 다음을 통해 얻을 수 있습니다. 결과 집합의 ID를 기준으로 max 함수를 실행한 다음 ID 집합을 기반으로 모든 레코드를 쿼리합니다. 테스트 아이디어
중복 제거 후 데이터 쿼리max(id)를 id로 선택, name,email,card_num FROM users GROUP BY name,email,card_num;
SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num;
SELECT ID from (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T;
SELECT * from users where id in (SELECT ID from (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T);
create TEMP TABLE tmp_data as SELECT * from users where id in (SELECT ID from (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T);
insert into users_copy1 select * from tmp_data;
select count(*) from users_copy1;
중복 제거된 데이터에서 설정된 ID 가져오기
#🎜🎜 #(SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T;
# 🎜🎜# 중복 제거된 데이터에서 ID 세트를 가져오고 소스 데이터에서 레코드 목록을 가져옵니다SELECT * from users where id in (SELECT ID from (SELECT max (id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T);
Actual method#🎜🎜 #ID 가져오기 중복 제거된 데이터에서 설정하고, 원본 데이터에서 레코드 목록을 얻고, 이 목록 데이터를 임시 테이블에 저장합니다.
create TEMP TABLE tmp_data as SELECT * from users where id in (SELECT max(id) as id,name,email,card_num FROM users GROUP BY name,email,card_num) as T);
#🎜🎜##🎜🎜 ##🎜🎜#Save 임시 테이블의 데이터를 지정된 데이터 테이블로 완료#🎜🎜##🎜🎜##🎜🎜#insert into users_copy1 select * from tmp_data;
#🎜🎜 ##🎜🎜#Detection# 🎜🎜##🎜🎜##🎜🎜#탐지 결과는 첫 번째 단계에서 중복 제거 후의 전체 데이터 수와 동일합니까?#🎜🎜##🎜🎜##🎜🎜#개수 선택(*) from users_copy1;
#🎜🎜##🎜🎜#테스트 결과: 1.4w 데이터 중 2,300개의 데이터가 중복되었습니다. 실제 실행 결과는 0.7초로 기본적으로 현재 요구 사항을 충족합니다. #🎜🎜##🎜🎜##🎜🎜#더 많은 MySQL 관련 기술 기사를 보려면 #🎜🎜##🎜🎜##🎜🎜#MySQL 튜토리얼#🎜🎜##🎜🎜##🎜🎜# 열을 방문하세요. 배우다 ! #🎜🎜##🎜🎜#위 내용은 지정된 필드를 기반으로 하는 데이터베이스 중복 제거의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!