如何删除 Access 表中的重复项(不使用查询)?

Posted

技术标签:

【中文标题】如何删除 Access 表中的重复项(不使用查询)?【英文标题】:How can I remove duplicates in my Access table (not using queries)? 【发布时间】:2012-08-16 16:39:52 【问题描述】:

为清楚起见,我的表格中有 2 列。我觉得必须有一种方法可以做到这一点,但如果不做一个简单的查询,我想不出一种方法来实际做到这一点。我假设使用 VBA 来执行 UPDATE 语句并将其放入宏中,但是在做了一些研究之后,我没有想出任何特别有用的东西。我曾考虑过使用 DISTINCT,但似乎我不能在 UPDATE 语句中使用它。我应该如何解决这个问题?

编辑:抱歉,我似乎没有添加足够的信息,所以我将在此处添加。

如果我从这个开始:

Column 1 | Column 2
-------------------
    A    |    1
    C    |    3 
    B    |    2
    A    |    1
    C    |    3

我试图以这个结束(行的顺序本身并不重要):

Column 1 | Column 2
-------------------
    A    |    1
    C    |    3
    B    |    2

有人问我为什么不尝试用查询来做这件事。答案是因为我使用了一个链接到我的表的表单(通过多个中间查询)。在这个表格上,我必须能够输入数据并将其添加到我的表格中。如果我使用查询删除重复项,则查询和表之间的关系不再是一对一的,因此我将无法在表单中输入信息。

我希望这是有道理的,但如果没有,请告诉我,我会很乐意进一步详细说明。

【问题讨论】:

需要更多细节,示例数据,不使用查询是什么意思,为什么不呢。向我们展示示例数据和预期结果。 使用查询是您在数据库中做事的方式。任何涉及通过 VBA 和宏进行更新的解决方案都只是运行一堆查询的不必要的复杂方式。 我编辑了我最初的帖子以回答为什么我需要使用表格以及一个示例。如果您需要更多详细信息,请告诉我。 如果您想通过查询删除重复项,您将需要一个唯一的 ID。自动编号会做得很好。 【参考方案1】:

你需要使用一个记录集(因为你不能从你用查询指定的表结构中删除重复项,因为没有唯一的键来区分匹配的行,并得到一个你想要的必须创建一个新表):

dim rst as new adodb.recordset
dim c1 as string
dim c2 as string
rst.open "SELECT Column1, Column2 FROM TableName ORDER BY Column1, Column2" _
    , currentproject.connection, adOpenKeyset, adLockOptimistic
restart_:
c1 = rst(0)
c2 = rst(1)
rst.movenext
do while not rst.eof
    if rst.fields(0) = c1 and rst.fields(1) = c2 then  //duplicate
        rst.delete
        rst.requery
        goto restart_
    else
        c1 = rst(0)
        c2 = rst(1)
        rst.movenext
    end if
loop   

我在删除操作中使用的语法可能不可靠(抱歉,我总是使用查询来执行删除操作)

【讨论】:

【参考方案2】:

使用 distinct 获取所需的行并将它们插入到新表中。重命名旧表并将其替换为新表。

【讨论】:

感谢您的回复。不幸的是,这对我的目的不起作用。我刚刚在上面提到了这一点,但是这个表是附加到一个表单上的,所以每当新的重复项被导入到表中时,这个过程就必须不断地完成。我无法每次手动添加新表、传输数据和重命名它们。我想这就是你的意思,但如果我误解了你的想法,请告诉我。 不,你明白。我认为这是你需要做的一次性事情。另一个想法:将这两列设为主键,然后 Access 将不允许输入重复项。

以上是关于如何删除 Access 表中的重复项(不使用查询)?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在不创建查询的情况下从 Access 表中获取值

Oracle中如何删除重复数据

如何在从多个表中获取多行的同时删除 sql JOIN 中的重复项

根据一列删除重复项并根据另一表中的数据进行过滤

在 MS Access 中,如何以多对多关系列出记录,以使所列出的表中的记录不重复?