delete duplicate entries in table

mysql, sql, sql-delete, stored-procedures

Solution

One way of doing this is by joining the table on a subquery using `LEFT JOIN`. The subquery gets the lowest `ID` for every `UID`. When a record doesn't have match on the subquery, it just means that it has no matching record and can be safely deleted.

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID
            FROM    TableName
            GROUP   BY uid
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID
WHERE   b.uid IS NULL

- SQLFiddle Demo

However, if the records of `UID` can have different name, then you need to include `name` on the `group by` clause or else only unique `uid` with the lowest `ID` will remain.

DELETE  a
FROM    TableName a
        LEFT JOIN
        (
            SELECT  uid, MIN(ID) min_ID, name
            FROM    TableName
            GROUP   BY uid, name
        ) b ON  a.uid = b.uid AND
                a.ID = b.min_ID AND
                a.name = b.name
WHERE   b.uid IS NULL

- SQLFiddle Demo

- SQLFiddle Demo (the same uid with different name)

Problem

I want to delete multiple duplicate keys from the below table: ``` id | name | uid 1 | ekta | 5 2 | ekta | 5 3 | sharma | 10 4 | sharma | 10 ``` want it to be like ``` id | name | uid 1 | ekta | 5 3 | sharma | 10 ``` I am using mysql. Is it ossible.? I can't use `unique constraint` query to make unique enteries because i want this duplicate entries ones entered to the table.

Original source

Related problems