【问题标题】:Delete all but one duplicate rows in SQLite for version 3.22.0?删除版本 3.22.0 的 SQLite 中除一个重复行之外的所有重复行?
【发布时间】:2021-01-30 16:30:46
【问题描述】:

我在删除具有最高用户 ID 的重复行时遇到了一些问题,我想知道如何在 SQLite 中使用与版本 3.22.0 兼容的方法来实现这一点?

我可以通过运行以下语句来识别所有重复的行:

SELECT
    code, issue, COUNT(*)
FROM
    Data
GROUP BY
    code, issue
HAVING 
    COUNT(*) > 1

我尝试过使用:

delete from Data t1
where exists (select 1 from Data t2
              where t1.code = t2.code and t1.issue = t2.issue
                and t1.id < t2.id);

这给了我t1 附近的语法错误。我做错了什么?

【问题讨论】:

  • 在 t1 之前使用ASdbfiddle.uk/…
  • @forpas 我实际上尝试使用DELETE FROM Data AS t1. ...,这给我带来了一个新错误,上面写着near "AS": syntax error
  • 你可以在 fiddle 中看到它适用于 AS。
  • 这很奇怪,因为当我尝试运行它时它给了我一个错误。也许这可能是由于版本?我看到小提琴在 3.27.0 上运行,而我在 3.22.0 上运行?
  • 可以,但请考虑升级。 SQLite 的最新版本是 3.34.1。

标签: sql database sqlite


【解决方案1】:

我认为 sqlite 不支持 delete 的别名。

尝试以下查询:

delete from Data
where exists (select 1 from Data t2
              where data.code = t2.code and data.issue = t2.issue
                and data.id < t2.id);

【讨论】:

  • 谢谢!出于好奇,是否有可能以某种方式优化此查询,因为我试图删除一个有 350 万行的表中的大约 1.3k 行?
  • @Californium 。 . .这回答了您在此处提出的问题。如果您想专注于性能,我建议您提出一个问题,并提供有关数据大小等的适当详细信息。
猜你喜欢
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2012-11-19
  • 1970-01-01
相关资源
最近更新 更多