>데이터 베이스 >MySQL 튜토리얼 >각 이메일의 최신 항목을 유지하면서 MySQL에서 중복 레코드를 어떻게 삭제할 수 있습니까?

각 이메일의 최신 항목을 유지하면서 MySQL에서 중복 레코드를 어떻게 삭제할 수 있습니까?

DDD
DDD원래의
2024-11-16 02:28:03557검색

How Can I Delete Duplicate Records in MySQL Keeping the Latest Entry for Each Email?

최신 ID 보존으로 MySQL에서 중복 레코드를 효과적으로 삭제

문제:

In 고유 ID와 이메일 필드가 모두 포함된 MySQL 테이블의 경우 중복된 이메일 주소가 발생합니다. 작업은 고유 ID를 유지하면서 각 중복 이메일의 최신(가장 최근에 삽입된) 인스턴스를 제외한 모든 인스턴스를 제거하는 것입니다.

해결책:

문제는 해결될 수 있습니다. 중복 이메일을 식별하고 제거하는 2단계 프로세스를 통해

1단계: 중복 이메일 식별 이메일

select email 
from test
group by email
having count(*) > 1;

이 쿼리는 테이블에 두 번 이상 나타나는 모든 이메일 목록을 반환합니다.

2단계: 중복 기록 분리 및 삭제

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를 포함하는 하위 쿼리(중복)입니다. 그런 다음 최신 ID보다 작은 ID를 가진 모든 중복 기록을 삭제하여 각 이메일의 가장 최근에 삽입된 인스턴스만 효과적으로 보존합니다.

대체 솔루션:

더 간결한 효율적인 솔루션은 다음과 같습니다.

delete from test
where id not in (
  select max(id)
  from test
  group by email
);

이 쿼리는 최신 인스턴스가 아닌 모든 레코드를 식별하고 삭제합니다. 이메일이 중복되었습니다.

위 내용은 각 이메일의 최신 항목을 유지하면서 MySQL에서 중복 레코드를 어떻게 삭제할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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