ホームページ >データベース >mysql チュートリアル >主キーなしで SQLite テーブルから重複行を効率的に削除するにはどうすればよいですか?

主キーなしで SQLite テーブルから重複行を効率的に削除するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-05 22:21:40997ブラウズ

How to Efficiently Remove Duplicate Rows from a SQLite Table Without a Primary Key?

SQLite データベースの重複行の特定と削除

SQLite データベースでは、複数のエントリが同一のデータを共有する重複行が頻繁に発生します。一意の行を維持することが重要な状況では、重複を削除することが不可欠になります。この記事では、主キー列に依存せずに大規模な SQLite テーブルから重複行を削除する効率的な方法について説明します。

2 つの列 ('hash' と 'd') を持つ次のテーブルを考えてみましょう。このテーブル内の一部の行には、「hash」値と「d」値の両方が一致します。ただし、同一の「d」値は必ずしも一致する「ハッシュ」値を示すわけではありません。これを解決するために、重複する各行のインスタンスを 1 つだけ保持し、その他は破棄することを目指しています。

主キーがない場合に行を区別するために、SQLite は 'rowid' 疑似列を提供します。各行には一意の 'rowid' 値があり、それらを区別できるようになります。次のクエリは、'hash' と 'd' の一意の組み合わせごとに最小の 'rowid' を保持することにより、重複行を効果的に削除します。

DELETE FROM YourTable
WHERE rowid NOT IN
(
  SELECT MIN(rowid)
  FROM YourTable
  GROUP BY hash, d
);

'hash' と 'd' と並んで 'rowid' 列を利用することで、効果的に重複行を削除します。グループ化では、このクエリは、「hash」と「d」の一意の組み合わせごとに、最も低い「rowid」を持つ行を保持することを保証します。その結果、重複行はテーブルから効果的に削除されます。

以上が主キーなしで SQLite テーブルから重複行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。