>데이터 베이스 >MySQL 튜토리얼 >지정된 필드를 기반으로 하는 데이터베이스 중복 제거

지정된 필드를 기반으로 하는 데이터베이스 중복 제거

步履不停
步履不停원래의
2019-06-19 13:14:597260검색

지정된 필드를 기반으로 하는 데이터베이스 중복 제거

요구 사항: 이름/이메일/카드 번호 필드를 기반으로 사용자 테이블에서 중복 데이터 제거

#🎜🎜 #

아이디어: 그룹별 방법을 사용하여 '중복' 데이터를 쿼리하고 임시 테이블에 데이터를 저장한 다음 임시 테이블의 데이터를 지정된 테이블에 저장합니다.# 🎜🎜#

오해와 해결 방법:

그룹별 방법은 일부 필드(중복 없이 지정된 필드)만 얻을 수 있으며, 완전한 데이터를 한 번에 얻을 수는 없지만 그룹은 다음을 통해 얻을 수 있습니다. 결과 집합의 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;

  • 从去重后的数据中获取id集合

SELECT ID from (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);

实际方法

  • 根据去重后的数据中获取id集合,从源数据中获得记录列表,将这些列表数据存入一个临时表中

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.