2013-01-14 29 views
1

我需要运行删除查询从一个表,其中有一个特定BLOB列我查询SQLite中去除斑点重复

可以依靠斑的大小,以验证重复删除任何行它?

任何建议如何归档?

表例如:

ID int 
TheName varchar(50) 
Content Blob 
+0

简单的答案是“否”。但是,您需要包含您的表结构和一些数据示例。 –

回答

0

SQLite处理任何其他字段的斑点,因此您可以在Content列上使用比较或GROUP BY

要查找重复的记录,可以将所有相同的斑点分组在一起,并检查每个组中记录的计数;然后从每个组群得到一个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) 

(如果是三个或更多,你就必须执行此操作多次)。

+1

如果您使用WHERE ID NOT IN(SELECT min(ID)FROM myTable GROUP BY Content)(当然,省略HAVING),则可以一次执行此操作。 –

+0

看起来不错,我会试试 – RollRoll

0

您应该添加更多的列(可以称之为ContentHash)与斑点的哈希值(你可以使用SHA256或MD5)。然后使用新的列,您可以轻松识别重复并删除它们。

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

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