Mysql
 sql >> Database >  >> RDS >> Mysql

eliminare le voci duplicate nella tabella

Un modo per farlo è unire la tabella su una sottoquery usando LEFT JOIN . La sottoquery ottiene l'ID più basso per ogni UID . Quando un record non ha una corrispondenza nella sottoquery, significa semplicemente che non ha alcun record corrispondente e può essere eliminato in modo sicuro.

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

Tuttavia, se i record di UID può avere un nome diverso, quindi devi includere name nel group by clausola oppure solo uid univoco con il ID più basso rimarrà.

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