sql >> データベース >  >> RDS >> Mysql

複数のフィールドに基づいてSQLテーブルの重複を削除する方法

    相関サブクエリを実行してデータを削除できるはずです。重複しているすべての行を検索し、IDが最小の行を除くすべてを削除します。 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. where句の有無にかかわらず複数のテーブルを持つmysqldump

    2. Oracleで行のsha1-hashを作成する

    3. PHPテーブル作成エラー1064

    4. SQLクエリをどのように管理しますか