sqlite - 如何删除 SQLite 中的重复项?

标签 sqlite sql-delete

我有一个 SQLite 数据库,其中语句:

SELECT messdatum, count(*) as anzahl 
from lipo 
GROUP BY Messdatum 
ORDER BY anzahl desc;

结果出现在一些行中,这表明我有一些具有相同 Messdatum 的副本。 如何仅从我的 sqlite 数据库中删除重复项? (它应该删除 messdatum 相同的 anzahl-1 记录?)有人有建议吗?

PS:我找到了这个链接 How to remove duplicate from Microsoft但是 sqlite 方言有问题。由于 sqlite 语法,我遇到了一些错误。 所以 f.e.我可以这样做:

 INSERT into holdkey SELECT messdatum, count(*) as anzahl from lipo group by messdatum having count(*) > 1;

 INSERT into holddups SELECT DISTINCT lipo.* from lipo, holdkey where lipo.Messdatum = holdkey.messdatum ;

 DELETE lipo from lipo, holdkey where lipo.messdatum = holdkey.messdatum;

这里是删除命令的错误。我怎样才能做到这一点?我尝试使用

将 holdkey.anzahl 更新为 lipo 中的一个附加列
UPDATE lipo,holdkey set lipo.duplettenzahl = holdkey.anzahl WHERE lipo.messdatum = holdkey.messdatum ; 

但这也是不可能的。如果我将 anzahl 作为 lipo 中的 dublettenzahl,我可以从 lipo 中删除 dublettenzahl > 0 的所有记录。请帮忙!谢谢

最佳答案

SQLite 有一个 special column, ROWID默认情况下在每个表上创建(您可以 switch it off 使用 WITHOUT ROWID 修饰符,但在这样做之前要非常确定)。

这意味着我们可以识别重复项集中的特定行,例如,找到某个值的第一个条目:

SELECT messdatum, MIN(ROWID) FROM lipo

所以删除重复项的一种方法可能是这样的:

DELETE FROM lipo
WHERE rowid NOT IN (
  SELECT MIN(rowid) 
  FROM lipo 
  GROUP BY messdatum
)

关于sqlite - 如何删除 SQLite 中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25884095/

相关文章:

mysql - 在 MySQL 中从 HAVING COUNT(*) 中删除

sqlite - 使用 SQLProvider 和 SQLite 的 ResolutionPath 问题

android - SQLite UPDATE 查询不运行

python - sqlite3 : safe multitask read & write - how to?

android - 从android上的sqlite获取数据真的很慢

sql - oracle sql中删除大记录

mysql - 如何在 MySQL 中递归删除行(即也删除外键链接的行)?

python - 如何处理 DELETE 语句删除任何行的失败?

iphone - SQLite3 数据库实际上并没有插入数据 - iPhone

mysql - 如何使用 join 删除 mysql 行?