特定のblob列に重複があるテーブルから行を削除するには、Deleteクエリを実行する必要があります
ブロブを検証するために、ブロブのサイズに依存できますか?
これをアーカイブする方法について何か提案はありますか?
表の例:
ID int
TheName varchar(50)
Content Blob
SQLite は他のフィールドと同様に BLOB を処理するためGROUP BY
、Content
列に対して比較を使用することができます。
重複レコードを見つけるには、同一の BLOB をすべてグループ化し、各グループ内のレコード数を確認します。次に、それらの各グループから 1 つの ID を取得します。
SELECT max(ID)
FROM MyTable
GROUP BY Content
HAVING count(*) >= 2
これをサブクエリとして使用すると、実際にこれらのレコードを削除できます。
DELETE FROM MyTable
WHERE ID IN (SELECT max(ID)
FROM MyTable
GROUP BY Content
HAVING count(*) >= 2)
(3 通以上ある場合は、これを複数回実行する必要があります。)
Blob のハッシュ (SHA256 または md5 を使用できます) を使用して、もう 1 つの列 (ContentHash と呼びます) を追加する必要があります。次に、新しい列を使用すると、重複を簡単に特定して削除できます。
Blob サイズの使用は非常に信頼性の低い方法です。同じコンテンツ サイズの異なる投稿を削除できます。許容できる場合は、それを使用してください)