sql >> Databasteknik >  >> RDS >> Mysql

Hur man tar bort dubbletter i SQL-tabell baserat på flera fält

Du bör kunna göra en korrelerad underfråga för att radera data. Hitta alla rader som är dubbletter och ta bort alla utom den med minsta id. För MYSQL måste en inre koppling (funktionell motsvarighet till EXISTS) användas, som så:

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)

För att testa, ersätt delete games from games med select * from games . Kör inte bara en radering på din DB :-)



  1. Sätt att åtgärda SQL Server upptäckte ett logiskt konsistensbaserat I/O-fel

  2. mysql tidsstämpel kolumn

  3. Hur sparar jag data korrekt i databasen?

  4. Hur optimerar man datum- och tidsökning i Mysql?