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

Hvad er den bedste måde at slette duplikerede værdier fra MySQL Table?

Først kan du prøve at tilføje indekser til felterne ProgramName og CustID, hvis du ikke allerede har dem.

De-Duping

Du kan gruppere dine optegnelser for at identificere duper, og mens du gør det, kan du få fat i den mindste ID-værdi for hver gruppe. Derefter skal du bare slette alle poster, hvis ID ikke er et af MinID'erne.

In-Clause Method

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

Join-Method

Du skal muligvis køre dette mere end én gang, hvis der er mange medlemmer pr. gruppe.

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

Nogle mennesker har præstationsproblemer med In-Clause, andre har ikke. Det afhænger meget af dine indekser og sådan. Hvis den ene er for langsom, så prøv den anden.

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



  1. mysql gemmer automatisk tidsstempel for oprettelse af rekorder

  2. Mysql int(11) nummer uden for rækkevidde

  3. .Net MySql fejl Den angivne nøgle var ikke til stede i ordbogen

  4. isset()-funktionen returnerer sand, selv når elementet ikke er indstillet