Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да изтриете дубликати в SQL таблица въз основа на множество полета

Трябва да можете да направите корелирана подзаявка, за да изтриете данните. Намерете всички редове, които са дублирани, и изтрийте всички, освен този с най-малкия идентификатор. За MYSQL трябва да се използва вътрешно присъединяване (функционален еквивалент на EXISTS), както следва:

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)

За да тествате, заменете delete games from games с select * from games . Не стартирайте просто изтриване на вашата DB :-)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. открива mysql грешки, без да го изпълнява

  2. Mysql рекурсия?

  3. Как да се покаже пореден номер в резултата от MySQL заявка

  4. Как мога да активирам бавния регистър на заявките на MySQL, без да рестартирам MySQL?

  5. Как да намеря всички релации между всички mysql таблици?