Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Sqlite中查询以删除blob重复_Sql_Sqlite_Blob - Fatal编程技术网

在Sqlite中查询以删除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会像处理任何其他

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

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

有没有关于如何存档的建议

表示例:

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,则可以一次完成,当然可以通过省略内容来实现。这看起来很不错,我会试试看