> 데이터 베이스 > MySQL 튜토리얼 > 최신 정보를 유지하면서 MySQL에서 중복 레코드를 삭제하는 방법은 무엇입니까?

최신 정보를 유지하면서 MySQL에서 중복 레코드를 삭제하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-01 13:30:11
원래의
326명이 탐색했습니다.

How to Delete Duplicate Records in MySQL While Retaining the Latest?

최신 레코드를 유지하면서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿