sql >> Databáze >  >> RDS >> Mysql

Jak odstranit duplikáty v tabulce SQL na základě více polí

Měli byste být schopni provést korelovaný dílčí dotaz k odstranění dat. Najděte všechny řádky, které jsou duplicitní, a odstraňte všechny kromě toho s nejmenším ID. Pro MYSQL je třeba použít vnitřní spojení (funkční ekvivalent EXISTS), takto:

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)

Pro testování nahraďte delete games from games pomocí select * from games . Nespouštějte jen mazání na vaší DB :-)



  1. Jak napsat efektivní počítadlo návštěv pro webové stránky

  2. Jak zobrazím seznam všech tabulek ve všech databázích na serveru SQL Server v jedné sadě výsledků?

  3. MySQL Atomic UPDATE v InnoDB vs MyISAM

  4. Proč SQLSTATE[HY000]:Obecná chyba?