【问题标题】:Remove duplicate records by first name and last name combined [closed]按名字和姓氏组合删除重复记录[关闭]
【发布时间】:2019-01-16 07:25:47
【问题描述】:

让我们有一个包含以下数据的表:

ID         FirstName        LastName
1          jj               ff
2          jj               hh
3          jj               ff

我只想删除名字和姓氏组合的重复记录。所以,我想要的输出应该是:

ID         FirstName        LastName
1          jj               ff
2          jj               hh

如何完成这个任务?

编辑

只是为了更多地说明我的问题。我的表包含 ID 字段作为主键。因此,在我的例子中,重复的记录只有名字和姓氏,这意味着 ID 不是必须重复的,因为我的表永远不会有重复的 ID。所以,我想要的删除重复记录与传统的删除方法有点不同,传统的删除方法考虑在整个行字段重复时删除行。

【问题讨论】:

  • 我真的很想知道是什么让两行的问题变得无聊?我什至用简单明了的例子说明了我的需求。有些人只是反对投票。 !!
  • 不是投反对票的人。我只提供一些见解,因此无意冒犯。对于许多有经验的数据库程序员来说,删除关系(即 SQL)数据库中的重复记录被认为是非常基本的。有很多关于如何做到这一点的网站和视频教程,所以我想其他人可能会认为缺乏研究。 How to ask 页面建议“搜索和研究”,传统是您应该分享您尝试过的内容。您的问题中没有任何研究或尝试解决方案的迹象。
  • C Perkins,你可能是 OP 的一部分。但是,我的表包含 ID 字段作为主键。因此,在我的例子中,重复的记录只有名字和姓氏,这意味着 ID 不是必须重复的,因为我的表永远不会有重复的 ID。所以,我想要的删除重复记录与传统的删除方法有点不同,传统的删除方法考虑在整个行字段重复时删除行。老实说,我没有找到像我在此处接受的答案中找到的那样满足我的账单的代码。
  • 我很高兴你得到了对你有用的代码,但在大多数正确规范化的表中,ID 字段通常是主键并且从不重复。你的情况并不少见。必须做的就是仅将基本模式应用于几个字段,而基本上忽略其他字段。大部分编程都是关于遵循特定细节可能不同的模式。
  • 请记住,我发表评论的唯一原因是帮助您了解为什么其他人投了反对票……以及现在为什么这个问题因为太宽泛而被搁置。 Stack Overflow 传统上是针对有针对性的问题,而不是为不熟悉特定语言的人提供教程或代码编写服务。我很同情你学习 SQL,但不熟悉 SQL 不足以避免被否决。研究基础知识的首选方法是查找教程。如果您对 SO 很陌生,我不会这么说,但您有足够高的声誉来理解这一点。

标签: ms-access vba duplicates


【解决方案1】:

我对Access的SQL方言了解不多,但也许

DELETE FROM table WHERE ID NOT IN (
  SELECT MIN(t2.ID) FROM table t2
  GROUP BY t2.FirstName, t2.LastName
)

内部语句为每个名字/姓氏组合 (1, 2) 选择第一个 ID。然后删除不在该列表中的所有内容 (3)。

编辑:将 FIRST() 更改为 MIN()

【讨论】:

  • 我试过了,但是出现语法错误
  • ...错误说明了什么?
  • Syntax error in query expression ID NOT IN ( SELECT MIN(t2.ID) FROM table t2 GROUP BY t2.FirstName, t2.LastName )
  • 准确显示您正在输入的内容。我在 Access 2003 中使用与您的表格完全相同的表格进行了尝试,效果很好。
  • 你需要DELETE FROM Students WHERE ID NOT IN ( SELECT MIN(t2.ID) FROM ***Students*** t2 GROUP BY t2.FirstName, t2.LastName ),你没有替换第二个表名。
【解决方案2】:

假设你的表名是 tblStudents,使用这个:

DELETE 
FROM tblStudents t1
WHERE t1.ID NOT IN
(
SELECT MIN(t2.ID)
FROM tblStudents t2
WHERE t1.FirstName =  t2.FirstName
AND t1.LastName =  t2.LastName
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 2016-02-22
    • 2013-11-04
    相关资源
    最近更新 更多