如何在 MS Access 2003 中删除具有唯一 ID 的重复条目?
Posted
技术标签:
【中文标题】如何在 MS Access 2003 中删除具有唯一 ID 的重复条目?【英文标题】:How do I get rid of Duplicate Entries With Unique IDs in MS Access 2003? 【发布时间】:2010-05-05 12:38:22 【问题描述】:我正在开发一个包含大量重复条目的 MS Access 数据库。问题是有一个学生表,有时不是只更新某个学生的信息,而是用不同的 ID 再次添加学生。我想摆脱所有重复项(这很痛苦,因为几乎没有任何方法可以区分它们),只需删除重复项就可以了,除了其他表可能依赖于重复项。如何将依赖某个 ID 的所有表更改为依赖我选择保留的 ID?
它是这样的:
学生证 | L. 姓名 |F.姓名 ANDY-01 |安迪 |安迪 ANDY-02 |安迪 |安迪然后在课程表中,我会列出 ANDY-01 会学习的课程,以及 ANDY-02 会学习的课程。我想合并所有将 ANDY-01 和 ANDY-02 作为 ANDY-01 的表中的所有条目。我该怎么办?
(别担心我如何区分 ANDY-01 和 ANDY-02)
【问题讨论】:
我认为最好的办法是在学生表中添加一个“应该是 ID”列并使用它来更新相关表。 想根据每个学生的数据创建一个 ID?问题是没有足够的相关数据来创建 ID。我得到的只是他们的名字、姓氏,在某些情况下(这是我要先解决的情况)附加到他们的 ID 的生日。真是一团糟 那么与其他表有什么关系? 学生参加的课程和他们所属的部门。我认为我的行动计划是找出重复项,为每个重复项创建一个临时 ID(因此重复项将具有相同的临时 ID),然后使用此临时 ID 更新每个表。我将不得不彻底重做这个 ID 系统,因为它只是一团糟。 我认为您是对的 - 使用与表匹配的唯一 ID 组织所有内容,然后您将处于重新分配重复项的更好位置,并且您将有足够合理的审计跟踪,如果什么似乎是重复的,是单独的记录。祝你好运,这不是很有趣。 【参考方案1】:+1 表示 Riho 的回答。要更新多个表,您可以创建如下所示的过程,然后手动更新 ID 值并为每个学生执行该过程。 如果您有一个映射新旧 ID 的表或查询,您可以编写另一个过程来读取该表并为每个学生调用此过程。
Public Sub UpdateStudent()
Dim oldID As String
Dim newID As String
oldID = "ID1"
newID = "ID2"
DoCmd.Execute "update another_table set student_id='" & newID & "' where student_id=" & oldID
DoCmd.Execute "update yet_another_table set student_id='" & newID & "' where student_id=" & oldID
End Sub
【讨论】:
我的 VB 代码有点问题。这就是我所拥有的:。选项比较数据库 Public Sub RemoveDupelicateDepartments() Dim oldID As String Dim newID As String oldID = "DND-01" newID = "DEPA-04" DoCmd.RunSQL "UPDATE [Clean student table] SET [HomeDepartment]=" & newID & " WHERE [HomeDepartment]=" & oldID & ";"结束子。每当我运行它时,它都会询问我参数“DEPA”和“DND”。它可以作为 SQL 查询正常工作。也许我在 VB 中声明了错误的字符串? 如果您的 ID 是字符串而不是整数,那么它们需要用引号括起来。我已经更新了我的示例以使用字符串。注意 SQL 语句中的单引号。【参考方案2】:你只需要更新一些 SQL:
update another_table set student_id=:ID2 where student_id=:ID1
【讨论】:
无论如何我都可以让它在单个查询中更新多个表,或者可能是一种同时执行一堆查询的方法(可能使用不同的语言(MSVB?))? @Riho:“=:”是什么?这不会被 Jet/ACE 正确执行。您确实注意了所涉及的数据库,对吗? :ID1 - 要替换为实际值的参数 留给用户作为练习。 Ben V 给出了答案。以上是关于如何在 MS Access 2003 中删除具有唯一 ID 的重复条目?的主要内容,如果未能解决你的问题,请参考以下文章