최신 레코드를 유지하면서 MySQL에서 중복 레코드를 삭제하는 방법
고유 식별자와 중복 이메일 주소가 포함된 테이블을 처리할 때 다음과 같습니다. 가장 최근 기록을 보존하면서 이러한 중복 항목을 제거해야 하는 경우가 많습니다. MySQL은 이 목표를 달성하기 위한 여러 가지 방법을 제공합니다.
한 가지 접근 방식은 반복되는 이메일 주소를 식별하고 각 이메일에 대해 최대 ID로 표시되는 가장 최근 기록을 찾는 것입니다. 이는 GROUP BY, HAVING 및 MAX() 함수의 조합을 사용하여 수행할 수 있습니다.
가장 최근 레코드가 식별되면 다음 단계는 해당 레코드보다 낮은 ID를 가진 모든 중복 레코드를 삭제하는 것입니다. 각각의 최대 ID. 이는 INNER JOIN을 사용하여 이메일 주소와 ID 값을 비교하는 DELETE 문으로 수행할 수 있습니다.
데이터베이스 테이블 예
이 프로세스를 설명하려면 다음을 고려하세요. "test"라는 다음 테이블:
ID EMAIL ---------------------- -------------------- 1 aaa 2 bbb 3 ccc 4 bbb 5 ddd 6 eee 7 aaa 8 aaa 9 eee
중복 식별 이메일
select email from test group by email having count(*) > 1;
이 쿼리는 'aaa', 'bbb' 및 'eee'가 반복되는 이메일임을 나타내는 다음 결과를 반환합니다.
EMAIL -------------------- aaa bbb eee
가장 최근 기록 찾기
select max(id) as lastId, email from test where email in ( select email from test group by email having count(*) > 1 ) group by email;
이 쿼리는 최대 ID를 검색합니다. 및 각 중복에 대한 해당 이메일 주소:
LASTID EMAIL ---------------------- -------------------- 8 aaa 4 bbb 9 eee
중복 레코드 삭제
delete test from test inner join ( select max(id) as lastId, email from test where email in ( select email from test group by email having count(*) > 1 ) group by email ) duplic on duplic.email = test.email where test.id < duplic.lastId;
이 쿼리를 실행한 후 "테스트" 테이블에는 가장 많은 레코드만 포함됩니다. 각 이메일 주소에 대한 최근 기록으로 인해 다음과 같은 결과가 발생합니다. 데이터:
+----+-------+ | id | email | +----+-------+ | 3 | ccc | | 4 | bbb | | 5 | ddd | | 8 | aaa | | 9 | eee | +----+-------+
최적화된 삭제 쿼리
더 최적화된 대체 삭제 쿼리가 아래에 제공됩니다.
delete from test where id not in ( select max(id) from test group by email)
위 내용은 최신 정보를 유지하면서 MySQL에서 중복 레코드를 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!