在 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 中删除重复项的最快方法的主要内容,如果未能解决你的问题,请参考以下文章