MySQLで重複行を削除する 質問する

MySQLで重複行を削除する 質問する

次のフィールドを持つテーブルがあります:

id (Unique)
url (Unique)
title
company
site_id

ここで、同じ行を削除する必要がありますtitle, company and site_id。これを行う 1 つの方法は、次の SQL とスクリプト ( PHP ) を使用することです。

SELECT title, site_id, location, id, count( * ) 
FROM jobs
GROUP BY site_id, company, title, location
HAVING count( * ) >1

このクエリを実行した後、サーバー側スクリプトを使用して重複を削除できます。

しかし、SQL クエリのみを使用してこれを実行できるかどうかを知りたいです。

ベストアンサー1

これを行う非常に簡単な方法は、UNIQUE3 つの列にインデックスを追加することです。ALTERステートメントを書くときに、IGNOREキーワードを含めます。次のようになります。

ALTER IGNORE TABLE jobs
ADD UNIQUE INDEX idx_name (site_id, title, company);

これにより、重複する行がすべて削除されます。追加の利点として、INSERTs重複している行は今後エラーになります。いつものように、このような操作を実行する前にバックアップを取ることをお勧めします...

編集: MySQL 5.7以降では動作しなくなりました

この機能はMySQL 5.6では廃止され、MySQL 5.7で削除されましたなので動作しません。

おすすめ記事