ホームページ >データベース >mysql チュートリアル >SQL のみを使用して MySQL の重複行を効率的に削除するにはどうすればよいですか?
SQL を使用した MySQL の重複行の削除
MySQL データベース内の重複行は、データの不整合やパフォーマンスの問題を引き起こす可能性があります。この記事では、列「site_id」、「title」、「company」に基づいてテーブル (例: 「jobs」) から重複行を削除することに焦点を当てています。
複雑な SQL クエリでも重複を特定できますが、より効率的な方法では MySQL のインデックス機能を利用します。 これには、重複行の削除を自動的に処理する一意のインデックスの作成が含まれます。
一意のインデックス アプローチ (非推奨)
以前の簡単な解決策には、ALTER IGNORE TABLE
インデックスを指定した UNIQUE
ステートメントを使用することが含まれていました。
<code class="language-sql">ALTER IGNORE TABLE jobs ADD UNIQUE INDEX idx_name (site_id, title, company);</code>
このメソッドは、インデックスの作成中に重複行を自動的に削除します。 ただし、このアプローチは MySQL 5.6 で非推奨となり、以降のバージョンでは削除されます。
利点 (古い MySQL バージョンの場合):
最新の MySQL ソリューション (5.7 以降):
MySQL 5.7 以降では、ALTER IGNORE TABLE
メソッドはサポートされなくなりました。 代わりに、サブクエリで DELETE
ステートメントを使用して重複を削除します。 これにはより複雑なアプローチが必要ですが、現在の MySQL バージョンとの互換性が保証されます。 一般的な解決策には、GROUP BY
句と HAVING
句を使用して重複を特定し、1 より大きいカウントをフィルタリングし、特定の基準に基づいて余分な行を削除します (例: 最小 ID の行を保持する)。 正確なクエリは、特定のニーズとテーブル構造によって異なります。 このアプローチの詳細な例については、MySQL ドキュメントを参照してください。
以上がSQL のみを使用して MySQL の重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。