Home Database Mysql Tutorial How to Delete Duplicate Records in MySQL While Retaining the Latest?

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

Dec 01, 2024 pm 01:30 PM

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

How to Delete Duplicate Records in MySQL While Retaining the Latest

When dealing with tables that contain unique identifiers and duplicate email addresses, it is often necessary to remove these duplicates while preserving the most recent record. MySQL provides several methods to achieve this objective.

One approach involves identifying the email addresses that are repeated and finding the most recent record, represented by the maximum ID, for each of these emails. This can be done using a combination of the GROUP BY, HAVING, and MAX() functions.

Once the most recent records have been identified, the next step is to delete all duplicate records with an ID lower than their respective maximum ID. This can be accomplished with a DELETE statement that uses an INNER JOIN to compare the email addresses and ID values.

Example Database Table

To illustrate this process, consider the following table named "test":

    ID                     EMAIL                
    ---------------------- -------------------- 
    1                      aaa                  
    2                      bbb                  
    3                      ccc                  
    4                      bbb                  
    5                      ddd                  
    6                      eee                  
    7                      aaa                  
    8                      aaa                  
    9                      eee 
Copy after login

Identifying Duplicate Emails

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

This query returns the following result, indicating that 'aaa', 'bbb', and 'eee' are repeated emails:

    EMAIL                
    -------------------- 
    aaa                  
    bbb                  
    eee  
Copy after login

Finding the Most Recent Records

    select max(id) as lastId, email
    from test
    where email in (
        select email 
        from test
        group by email
        having count(*) > 1
    )
    group by email;
Copy after login

This query retrieves the maximum ID and corresponding email address for each duplicate:

    LASTID                 EMAIL                
    ---------------------- -------------------- 
    8                      aaa                  
    4                      bbb                  
    9                      eee                                 
Copy after login

Deleting Duplicate Records

    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;
Copy after login

After executing this query, the "test" table will contain only the most recent records for each email address, resulting in the following data:

    +----+-------+
    | id | email |
    +----+-------+
    |  3 | ccc   |
    |  4 | bbb   |
    |  5 | ddd   |
    |  8 | aaa   |
    |  9 | eee   |
    +----+-------+
Copy after login

Optimized Delete Query

An alternative, more optimized delete query is provided below:

    delete from test
    where id not in (
        select max(id)
        from test
        group by email)
Copy after login

The above is the detailed content of How to Delete Duplicate Records in MySQL While Retaining the Latest?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Reduce the use of MySQL memory in Docker Reduce the use of MySQL memory in Docker Mar 04, 2025 pm 03:52 PM

Reduce the use of MySQL memory in Docker

How do you alter a table in MySQL using the ALTER TABLE statement? How do you alter a table in MySQL using the ALTER TABLE statement? Mar 19, 2025 pm 03:51 PM

How do you alter a table in MySQL using the ALTER TABLE statement?

How to solve the problem of mysql cannot open shared library How to solve the problem of mysql cannot open shared library Mar 04, 2025 pm 04:01 PM

How to solve the problem of mysql cannot open shared library

What is SQLite? Comprehensive overview What is SQLite? Comprehensive overview Mar 04, 2025 pm 03:55 PM

What is SQLite? Comprehensive overview

Run MySQl in Linux (with/without podman container with phpmyadmin) Run MySQl in Linux (with/without podman container with phpmyadmin) Mar 04, 2025 pm 03:54 PM

Run MySQl in Linux (with/without podman container with phpmyadmin)

Running multiple MySQL versions on MacOS: A step-by-step guide Running multiple MySQL versions on MacOS: A step-by-step guide Mar 04, 2025 pm 03:49 PM

Running multiple MySQL versions on MacOS: A step-by-step guide

What are some popular MySQL GUI tools (e.g., MySQL Workbench, phpMyAdmin)? What are some popular MySQL GUI tools (e.g., MySQL Workbench, phpMyAdmin)? Mar 21, 2025 pm 06:28 PM

What are some popular MySQL GUI tools (e.g., MySQL Workbench, phpMyAdmin)?

How do I configure SSL/TLS encryption for MySQL connections? How do I configure SSL/TLS encryption for MySQL connections? Mar 18, 2025 pm 12:01 PM

How do I configure SSL/TLS encryption for MySQL connections?

See all articles