1

主キー列とテキスト列のみを持つテーブルがあります。テキスト列に重複した値があり、それらを削除したいです。

私は何を試しましたか


私は少しググって、答えだと思った ものをすぐに見つけました。それはこれでした:

ALTER IGNORE TABLE tablename ADD UNIQUE INDEX index_name (column1);

しかし、クエリを実行しようとした後、MySQL は「#1062 - キー 'remove_duplicates' のエントリ 'v&d' が重複しています」と言ってしまいました。そのため、しばらくいじった後、うまくいかないことがわかりました。

その後、tmp テーブルを作成して古いものを削除しようとしましたが、それもうまくいきませんでした。構文が間違っている可能性があります。

CREATE table `tmp` like `Tag`

alter table tmp add unique (text)

INSERT IGNORE INTO `tmp` SELECT * FROM `Tag`

RENAME TABLE `Tag` TO `deleteme`
RENAME TABLE `tmp` TO `Tag`

DROP TABLE `deleteme`;



私が欲しいものは


列「テキスト」の値が重複していないテーブル。以前の方法でエラーが発生した場合はお知らせください。または、別の方法で行う必要がある/可能だと思われる場合はお知らせください。



編集


私も PK にぶら下がっている関係があることを忘れていました (ええ、私が知っている非常に重要です)。他のテーブルとの関係も「保存」する方法はありますか? 必要に応じて、他のテーブルの ID を手動で変更できますが、それを変更する方法も素晴らしいでしょう。

4

2 に答える 2

10

テーブルに挿入するときは、重複を削除してから次のようにします。

CREATE table `tmp` like `Tag`

alter table tmp add unique (text)

INSERT INTO `tmp` SELECT min(pk), text FROM `Tag` group by text;

RENAME TABLE `Tag` TO `deleteme`
RENAME TABLE `tmp` TO `Tag`

DROP TABLE `deleteme`;
于 2013-08-20T14:44:17.063 に答える