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

Was ist der beste Weg, um doppelte Werte aus der MySQL-Tabelle zu löschen?

Zunächst können Sie versuchen, Indizes zu den Feldern ProgramName und CustID hinzuzufügen, falls Sie diese noch nicht haben.

De-Duping

Sie können Ihre Datensätze gruppieren, um Duplikate zu identifizieren, und dabei den Mindest-ID-Wert für jede Gruppe abrufen. Löschen Sie dann einfach alle Datensätze, deren ID nicht zu den MinIDs gehört.

In-Klausel-Methode

delete from
 ProgramsList
where
 id not in 
    (select min(id) as MinID
      from ProgramsList
      group by ProgramName, CustID) 

Join-Methode

Möglicherweise müssen Sie dies mehr als einmal ausführen, wenn es viele Mitglieder pro Gruppe gibt.

DELETE P
FROM ProgramsList as P
INNER JOIN 
    (select count(*) as Count, max(id) as MaxID
     from ProgramsList
     group by ProgramName, CustID) as A on A.MaxID = P.id
WHERE A.Count >= 2

Einige Leute haben Performance-Probleme mit der In-Klausel, andere nicht. Es hängt viel von Ihren Indizes und so ab. Wenn einer zu langsam ist, versuchen Sie den anderen.

Verwandte:https://stackoverflow.com/a/4192849/127880