在Sqlite中查询以删除blob重复

时间:2013-01-14 00:14:17

标签: sql sqlite blob

我需要运行一个Delete查询来从表中删除任何特定blob列重复的行

我可以依靠blob的大小来验证吗?

有关如何存档的任何建议吗?

表示例:

ID int
TheName varchar(50)
Content Blob

3 个答案:

答案 0 :(得分:0)

您应该使用Blob的哈希值添加一个列(我们称之为ContentHash)(您可以使用SHA256或md5)。然后使用新列,您可以轻松识别重复项并删除它们。

使用Blob大小是非常不可靠的方式,您可以删除具有相同内容大小的不同帖子。如果可以接受则使用它)

答案 1 :(得分:0)

SQLite像处理任何其他字段一样处理blob,因此您可以在GROUP BY列上使用比较或Content

要查找重复记录,您可以将所有相同的blob组合在一起,并检查每个组中的记录计数;然后从每个组中获取一个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)

(如果有三次或更多次,则必须多次执行此操作。)

答案 2 :(得分:0)

  1. 使用SELECT DISTINCT并将所有记录提取到临时表中。
  2. 截断第一张表。
  3. 从临时表到第一个表中选择所有记录。