我需要运行删除查询以从表中删除特定 blob 列重复的所有行
我可以依靠 blob 的大小来验证它吗?
有什么建议如何存档吗?
表格示例:
ID int
TheName varchar(50)
Content Blob
您应该使用 Blob 的哈希(可以使用 SHA256 或 md5)再添加一列(我们称之为 ContentHash)。然后使用新列,您可以轻松识别重复项并将其删除。
使用 Blob 大小是非常不可靠的方式,您可以删除具有相同内容大小的不同帖子。如果可以接受,请使用它)
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)
(如果有三次或更多,您将不得不多次执行此操作。)