sql >> Database >  >> RDS >> Mysql

Wat is de beste manier om dubbele waarden uit de MySQL-tabel te verwijderen?

Ten eerste kunt u proberen indexen toe te voegen aan de velden ProgramName en CustID als u deze nog niet heeft.

De-duping

Je kunt je records groeperen om dupes te identificeren, en terwijl je dat doet, pak je de min ID-waarde voor elke groep. Verwijder vervolgens alle records waarvan de ID niet een van de MinID's is.

In-Claus-methode

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

Join-Methode

Het kan zijn dat u dit meer dan eens moet uitvoeren, als er veel leden per groep zijn.

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

Sommige mensen hebben prestatieproblemen met de In-Clause, andere niet. Het hangt sterk af van uw indexen en dergelijke. Als de ene te traag is, probeer dan de andere.

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



  1. Veroorzaakt door:java.sql.SQLException:Toegang geweigerd voor gebruiker 'root'@'localhost' (met wachtwoord:JA)

  2. MySQL:INT converteren naar DATETIME

  3. SQL Server SELECTEER IN @variabele?

  4. Gegevens selecteren uit een sleutelwaardepaartabel