在Sqlite中查询以删除blob重复
我需要运行一个Delete查询来删除表中存在特定blob列重复的任何行 我可以依靠blob的大小来验证它吗 有没有关于如何存档的建议 表示例:在Sqlite中查询以删除blob重复,sql,sqlite,blob,Sql,Sqlite,Blob,我需要运行一个Delete查询来删除表中存在特定blob列重复的任何行 我可以依靠blob的大小来验证它吗 有没有关于如何存档的建议 表示例: ID int TheName varchar(50) Content Blob 您应该再添加一列,让我们用Blob的散列称之为ContentHash,您可以使用SHA256或md5。然后使用新列,您可以轻松地识别重复项并将其删除 使用Blob大小是非常不可靠的方法,可以删除具有相同内容大小的不同帖子。如果可以接受,则使用它,SQLite会像处理任何其他
ID int
TheName varchar(50)
Content Blob
您应该再添加一列,让我们用Blob的散列称之为ContentHash,您可以使用SHA256或md5。然后使用新列,您可以轻松地识别重复项并将其删除
使用Blob大小是非常不可靠的方法,可以删除具有相同内容大小的不同帖子。如果可以接受,则使用它,SQLite会像处理任何其他字段一样处理blob,因此您可以在内容列上使用比较或分组方式 要查找重复记录,可以将所有相同的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)
如果有三个或更多副本,则必须执行多次
使用SELECTDISTINCT并将所有记录提取到临时表中。
截断第一个表。
选择从临时表到第一个表的所有记录。
简单的答案是否定的。但是,您需要包括您的表结构和一些数据示例。如果您使用WHERE ID NOT in SELECT minID FROM myTable GROUP,则可以一次完成,当然可以通过省略内容来实现。这看起来很不错,我会试试看