次のフィールドを持つテーブルがあります:
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
これを行う非常に簡単な方法は、UNIQUE
3 つの列にインデックスを追加することです。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で削除されましたなので動作しません。