在 Access DB 中删除重复项的最快方法

Posted

技术标签:

【中文标题】在 Access DB 中删除重复项的最快方法【英文标题】:Fastest way for duplicates remove in Access DB 【发布时间】:2018-05-07 09:24:00 【问题描述】:

我从 Excel VBA 模式管理 Access MDB 文件,并希望找到最快的方法来删除数百万行文件中的重复记录(备忘录类型,最大字符串长度约为 400 个符号)。

子访问数据库() 将 db_file 调暗为字符串 将 cn 调暗为 ADODB.Connection 暗淡 rs 作为 ADODB.Recordset db_file = "c:\文件\" db_file = db_file & "accdb.mdb" 设置 cn = New ADODB.Connection cn.ConnectionString = _ “提供者=Microsoft.Ace.OLEDB.12.0;” &_ "数据源=" & db_file & ";" &_ “持久安全信息=假” cn.Open '重复删除--------------------------------- 设置 rs = cn.Execute("SELECT Base, count(*)" & _ “从 AccessBase GROUP BY Base HAVING count(*) > 1”) cn.Execute("设置行数 1;" &_ “从 AccessBase 中删除 Base = rs.Fields(0)”) '---------------------------------------------------- ---- cn.关闭 结束子

一张表(“AccessBase”)中只有一列(“Base”)。 我试图删除duplicates delete 块中的重复字符串,但我猜有一些错误。

【问题讨论】:

How can I remove duplicate rows?的可能重复 为什么你发布的代码没有删除重复的逻辑? 感谢 Vityata 的链接,但我不知道如何将 SQL 请求添加到我的 VBA 代码中。 @nicomp - 你的意思是我应该尝试添加一些对我不起作用的 sql 请求? @FL.Alx - 在Set rs = cn.Execute("SELECT COUNT (Base) FROM AccessBase") 部分中写入重复主题的 SQL。 【参考方案1】:

duplicates delete 块中使用单个查询,而不是一次使用两个查询

cn.Execute ("Delete from AccessBase where Base IN (SELECT Base FROM AccessBase GROUP BY base HAVING count(*) > 1)")

【讨论】:

感谢您的帮助,但我收到了Run-Time Error '-2147217887 (80040e21)' Multiple-Step Operation Generated Errors 请注意,这将删除 所有 个重复项 - 我想目标是保留每个重复项的一个实例。 @Andre - 谢谢,我也猜到了,因为SELECT Base FROM AccessBase GROUP BY base HAVING count(*) > 1) = 字符串值和计数。

以上是关于在 Access DB 中删除重复项的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

怎么删除ACCESS中的重复记录 只保留一条

在 Pandas DataFrame 中删除重复索引的最快方法 [重复]

在 pySpark 中删除重复项的最佳方法

识别和删除数组中重复项的最有效方法是啥?

从Dart列表中删除重复项的2种方法

使用 vanilla JS 删除 ES5 及更低版本数组中重复数字的最快方法是啥?