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

So löschen Sie Duplikate in einer SQL-Tabelle basierend auf mehreren Feldern

Sie sollten in der Lage sein, eine korrelierte Unterabfrage durchzuführen, um die Daten zu löschen. Finden Sie alle Zeilen, die Duplikate sind, und löschen Sie alle bis auf die mit der kleinsten ID. Für MYSQL muss ein innerer Join (funktionales Äquivalent von EXISTS) verwendet werden, etwa so:

delete games from games inner join 
    (select  min(id) minid, date, time,
             hometeam_id, awayteam_id, locationcity, locationstate
     from games 
     group by date, time, hometeam_id, 
              awayteam_id, locationcity, locationstate
     having count(1) > 1) as duplicates
   on (duplicates.date = games.date
   and duplicates.time = games.time
   and duplicates.hometeam_id = games.hometeam_id
   and duplicates.awayteam_id = games.awayteam_id
   and duplicates.locationcity = games.locationcity
   and duplicates.locationstate = games.locationstate
   and duplicates.minid <> games.id)

Ersetzen Sie zum Testen delete games from games mit select * from games . Führen Sie nicht einfach einen Löschvorgang für Ihre Datenbank durch :-)