8

MySQL に重複のあるテーブルがあります。重複を削除して、1 つのエントリを保持しようとします。主キーがありません

次の方法で重複を見つけることができます。

select user_id, server_id, count(*) as NumDuplicates
from user_server
group by user_id, server_id
having NumDuplicates > 1

しかし、それらを削除することはできません:

ALTER IGNORE TABLE `user_server`  
ADD UNIQUE INDEX (`user_id`, `server_id`);

でも、SETforeign_key_checks = 0; 動かない。エラー コード: 1062。キー 'user_id_3' のエントリ '142-20' が重複しています

MySQL バージョン: 5.5.18 エンジン: InnoDB

他の方法はありますか?

4

3 に答える 3

8

おそらく最も簡単な方法は、テーブルの構造をコピーし、一意のインデックスを新しいテーブルに追加してから、次のことを行うことです。

INSERT IGNORE INTO new_table SELECT * FROM old_table

一時テーブルを作成せずに重複 (それぞれの 1 つを除く) を削除するには、次のようにします。

ALTER TABLE `user_server` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

DELETE us2 FROM user_server us1
 JOIN user_server us2 USING (user_id, server_id)
 WHERE us1.id < us2.id;

ALTER TABLE `user_server` DROP `id`;
于 2014-12-15T21:01:49.027 に答える