1

特定のblob列に重複があるテーブルから行を削除するには、Deleteクエリを実行する必要があります

ブロブを検証するために、ブロブのサイズに依存できますか?

これをアーカイブする方法について何か提案はありますか?

表の例:

ID int
TheName varchar(50)
Content Blob
4

3 に答える 3

0

SQLite は他のフィールドと同様に BLOB を処理するためGROUP BYContent列に対して比較を使用することができます。

重複レコードを見つけるには、同一の 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 通以上ある場合は、これを複数回実行する必要があります。)

于 2013-01-14T07:48:02.853 に答える
0

Blob のハッシュ (SHA256 または md5 を使用できます) を使用して、もう 1 つの列 (ContentHash と呼びます) を追加する必要があります。次に、新しい列を使用すると、重複を簡単に特定して削除できます。

Blob サイズの使用は非常に信頼性の低い方法です。同じコンテンツ サイズの異なる投稿を削除できます。許容できる場合は、それを使用してください)

于 2013-01-14T07:26:05.840 に答える
0
  1. SELECT DISTINCT を使用して、すべてのレコードを一時テーブルにフェッチします。
  2. 最初のテーブルを切り捨てます。
  3. 一時テーブルから最初のテーブルまでのすべてのレコードを選択します。
于 2013-01-14T09:56:03.567 に答える