Monday, January 28, 2019

How To Delete Duplicate Rows in MySQL

Summary: in this tutorial, you will learn various ways to delete duplicate rows in MySQL.
In the previous tutorial, we have shown you how to find duplicate values in a table. Once the duplicates rows are identified, you may want to delete them to clean up your data.

Prepare sample data

The following script creates the contacts table and inserts sample data into the contacts table for the demonstration.
You can execute this script to recreate test data after you execute a DELETE statement.
The following query returns the duplicate emails in the contacts table:
Delete duplicate rows in MySQL
As you can see, we have four rows with duplicate emails.

A) Delete duplicate rows using DELETE JOIN statement

MySQL provides you with the DELETE JOIN statement that you can use to remove duplicate rows quickly.
The following statement deletes duplicate rows and keeps the highest id:
The output is:
It indicated that four rows have been deleted. You can execute the query that find duplicate emails again to verify the delete:
The query returns an empty set, which means that the duplicate rows have been deleted.
Let’s verify data from the contacts table:
MySQL delete duplicate rows - DELETE JOIN keeps Highest ID
The rows with id 2, 4, 7, and 9 have been deleted.
In case you want to delete duplicate rows and keep the lowest id, you can use the following statement:
Note that you can execute the script for creating contacts table again and test this query. The following output shows the data of the contacts table after removing duplicate rows.
MySQL delete duplicate rows - DELETE JOIN keeps lowest ID

B) Delete duplicate rows using an intermediate table

The following shows the steps for removing duplicate rows using an intermediate table:
  1. Create a new table with the structure the same as the original table which you want to delete duplicate rows.
  2. Insert distinct rows from the original table to the immediate table.
  3. Drop the original table and rename the immediate table to the original table.
The following queries illustrate the steps:

Step 1.

Step 2.

Step 3.

For example, the following statements delete rows with duplicate emails from the contacts table:

C) Delete duplicate rows using ROW_NUMBER() function

Note that the ROW_NUMBER() function has been supported since MySQL version 8.02 so you should check your MySQL version before using the function.
The following statement uses the ROW_NUMBER() function to assign a sequential integer number to each row. If the email is duplicate, the row number will be greater than one.
The following statement returns the id list of the duplicate rows:
MySQL Delete Duplicate Rows - ROW_NUMBER function with subquery
And you just delete the duplicate rows from the contacts table using the DELETE statement with a subquery in the WHERE clause:
MySQL issued the following message:
In this tutorial, you have learned how to delete duplicate rows in MySQL by using the the DELETE JOIN statement or an intermediate table.

How to backup and download Database using PHP

< ?php $mysqlUserName = 'databaseusername' ; $mysqlPassword = 'databasepassword' ; $mysqlHostNa...