【问题标题】:Query in Sqlite to remove blob duplication在 Sqlite 中查询以删除 blob 重复
【发布时间】:2012-12-27 21:40:54
【问题描述】:

我需要运行删除查询以从表中删除特定 blob 列重复的所有行

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

有什么建议如何存档吗?

表格示例:

ID int
TheName varchar(50)
Content Blob

【问题讨论】:

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

标签: sql sqlite blob


【解决方案1】:

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

要查找重复记录,您可以将所有相同的 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)

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

【讨论】:

  • 如果您使用 WHERE ID NOT IN (SELECT min(ID) FROM myTable GROUP BY Content),您可以一次性完成(当然,省略 HAVING)。
  • 看起来不错,我试试
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:
    1. 使用 SELECT DISTINCT 并将所有记录提取到临时表中。
    2. 截断第一个表。
    3. 选择从临时表到第一个表的所有记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2020-12-25
      • 2021-04-06
      • 2011-10-08
      • 2011-06-23
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多