Home » SQL DELETE DUPLICATE RECORDS

SQL DELETE DUPLICATE RECORDS

SQL DELETE DUPLICATE RECORDS

When managing a database, ensuring data integrity is paramount. Duplicate rows can often creep into tables due to various reasons such as data entry errors, software bugs, or data integration processes. Fortunately, SQL DELETE DUPLICATE RECORDS provides a straightforward solution to eliminate duplicate entries—the DELETE statement with the assistance of aggregate functions and temporary tables. In this guide, we will delve into the intricacies of using SQL to identify and remove duplicate rows efficiently, ensuring the accuracy and reliability of your database.

The SQL DELETE DUPLICATE ROWS statement is a command used to eliminate duplicate records from a table within a relational database management system (RDBMS). It enables users to remove redundant data entries, ensuring data integrity and consistency within the database. This operation is particularly useful when dealing with large datasets where duplicate records can consume unnecessary storage space and complicate data analysis processes. By executing this command, users can streamline data management and optimize database performance.

Syntax

DELETE FROM DuplicateRows
WHERE RowNumber > 1;
SQL

Examples of SQL DELETE DUPLICATE RECORDS

Example 1: Employees Table

-- Create Employees table
CREATE TABLE Employees (
    ID INT,
    Name VARCHAR(50),
    Department VARCHAR(50),
    Salary INT
);

-- Insert sample data
INSERT INTO Employees (ID, Name, Department, Salary)
VALUES
    (1, 'Alice', 'HR', 5000),
    (2, 'Bob', 'IT', 6000),
    (3, 'Alice', 'HR', 5000),
    (4, 'Charlie', 'Finance', 5500),
    (5, 'Alice', 'HR', 5000);

-- Delete duplicate rows based on Name, Department, and Salary
WITH DuplicateRows AS (
    SELECT 
        ID,
        Name,
        Department,
        Salary,
        ROW_NUMBER() OVER (PARTITION BY Name, Department, Salary ORDER BY ID) AS RowNumber
    FROM 
        Employees
)
DELETE FROM DuplicateRows
WHERE RowNumber > 1;

-- Output after deleting duplicate rows
SELECT * FROM Employees;

SQL

Example 2: Customers Table

-- Create Customers table
CREATE TABLE Customers (
    ID INT,
    Name VARCHAR(50),
    Email VARCHAR(100)
);

-- Insert sample data
INSERT INTO Customers (ID, Name, Email)
VALUES
    (1, 'John', 'john@example.com'),
    (2, 'Alice', 'alice@example.com'),
    (3, 'John', 'john@example.com'),
    (4, 'Bob', 'bob@example.com');

-- Delete duplicate rows based on Email
WITH DuplicateRows AS (
    SELECT 
        ID,
        Name,
        Email,
        ROW_NUMBER() OVER (PARTITION BY Email ORDER BY ID) AS RowNumber
    FROM 
        Customers
)
DELETE FROM DuplicateRows
WHERE RowNumber > 1;

-- Output after deleting duplicate rows
SELECT * FROM Customers;

SQL

Example 3: Orders Table

-- Create Orders table
CREATE TABLE Orders (
    OrderID INT,
    CustomerID INT,
    Product VARCHAR(50),
    Quantity INT
);

-- Insert sample data
INSERT INTO Orders (OrderID, CustomerID, Product, Quantity)
VALUES
    (1, 101, 'Laptop', 2),
    (2, 102, 'Mouse', 1),
    (3, 101, 'Laptop', 2),
    (4, 103, 'Keyboard', 1),
    (5, 101, 'Laptop', 2);

-- Delete duplicate rows based on CustomerID, Product, and Quantity
WITH DuplicateRows AS (
    SELECT 
        OrderID,
        CustomerID,
        Product,
        Quantity,
        ROW_NUMBER() OVER (PARTITION BY CustomerID, Product, Quantity ORDER BY OrderID) AS RowNumber
    FROM 
        Orders
)
DELETE FROM DuplicateRows
WHERE RowNumber > 1;

-- Output after deleting duplicate rows
SELECT * FROM Orders;

SQL

Example 4: Products Table

-- Create Products table
CREATE TABLE Products (
    ProductID INT,
    Name VARCHAR(50),
    Category VARCHAR(50),
    Price DECIMAL(10, 2)
);

-- Insert sample data
INSERT INTO Products (ProductID, Name, Category, Price)
VALUES
    (1, 'Laptop', 'Electronics', 1200.00),
    (2, 'Mouse', 'Accessories', 20.00),
    (3, 'Laptop', 'Electronics', 1200.00),
    (4, 'Keyboard', 'Accessories', 30.00),
    (5, 'Headphones', 'Electronics', 50.00);

-- Delete duplicate rows based on Name, Category, and Price
WITH DuplicateRows AS (
    SELECT 
        ProductID,
        Name,
        Category,
        Price,
        ROW_NUMBER() OVER (PARTITION BY Name, Category, Price ORDER BY ProductID) AS RowNumber
    FROM 
        Products
)
DELETE FROM DuplicateRows
WHERE RowNumber > 1;

-- Output after deleting duplicate rows
SELECT * FROM Products;

SQL

Conclusion

In conclusion, effectively removing duplicate rows in a SQL table demands a thorough understanding of the data and the database structure. Employing the appropriate method, whether it’s using DISTINCT, GROUP BY, or window functions combined with the DELETE statement, ensures the integrity and accuracy of the dataset. Remember to exercise caution when executing DELETE operations to avoid unintentional data loss. Regularly reviewing and maintaining data quality practices can prevent the proliferation of duplicate records, fostering a clean and efficient database environment.

Frequently Asked Questions

1. Why are duplicate rows undesirable in a database?
Duplicate rows can lead to data inconsistency and inaccuracies. They can distort analysis results and waste storage space. Eliminating duplicates ensures data integrity and improves database efficiency.
2. How can I identify duplicate rows in a SQL table?
You can identify duplicate rows by comparing multiple columns or using aggregate functions like COUNT() with GROUP BY. Alternatively, window functions or the DISTINCT keyword can help identify unique rows.
3. Is it safe to use DELETE to remove duplicate rows?
Yes, it’s safe if you’re confident in the criteria used to identify duplicates and you’ve thoroughly tested your DELETE statement. Always back up your data before performing DELETE operations to avoid accidental data loss.
4. Can I delete duplicate rows based on specific criteria?
Absolutely. You can tailor your DELETE statement using WHERE clauses to target duplicates based on specific columns or conditions. This allows you to retain the most relevant records while removing redundant ones.