Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Doppelte Einträge in der Tabelle löschen

Eine Möglichkeit, dies zu tun, besteht darin, die Tabelle in einer Unterabfrage mit LEFT JOIN zu verknüpfen . Die Unterabfrage erhält die niedrigste ID für jede UID . Wenn ein Datensatz keine Übereinstimmung in der Unterabfrage hat, bedeutet dies nur, dass er keinen übereinstimmenden Datensatz hat und sicher gelöscht werden kann.

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

Wenn jedoch die Aufzeichnungen von UID kann einen anderen Namen haben, dann müssen Sie name angeben auf group by -Klausel oder sonst nur eindeutige uid mit der niedrigsten ID bleibt.

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