我有一个 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/