編集者の警告:このソリューションは計算効率が悪く、大きなテーブルの接続がダウンする可能性があります。
NB-必要 テストコピーで最初にこれを行う あなたのテーブルの!
それを行ったとき、AND n1.id <> n2.id
も含めない限り 、テーブル内のすべての行を削除しました。
-
id
が最も小さい行を保持する場合 値:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
id
が最も高い行を保持する場合 値:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
MySQL5.1でこの方法を使用しました
他のバージョンについてはよくわかりません。
更新:重複を削除するためにグーグルする人々はここに行き着くので
OPの質問はDELETE
に関するものですが 、INSERT
を使用することをお勧めします およびDISTINCT
はるかに高速です。 800万行のデータベースの場合、DELETE
を使用している間、以下のクエリには13分かかりました。 、2時間以上かかりましたが、完了しませんでした。
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;