【问题标题】:Using MS Access SQL, How Do I Delete Rows With Duplicate Values In Only One Column?使用 MS Access SQL,如何删除只有一列中重复值的行?
【发布时间】:2026-01-03 03:20:05
【问题描述】:

使用 MS Access SQL,我试图弄清楚如何删除 一列中有重复值的行

示例数据:

Department      | Job Category        | Name | Requestor ID
Medical Affairs | Vice President      | Kim  | 123
Medical Affairs | President           | Abe  | 123
Nursing         | Sr Vice President   | Bob  | 456
Nursing         | Exec Vice President | Jim  | 456
Patient Care    | President           | Sam  | 456

在上面的示例中,我想删除具有重复 Requestor ID 的行,只保留 Job Category 最低的行(即使 Job类别属于不同的部门)。这意味着当我删除我的重复项时,我只会在下面留下这些行:

结果:

Department      | Job Category        | Name | Requestor ID
Medical Affairs | Vice President      | Kim  | 123
Nursing         | Sr Vice President   | Bob  | 456

我对 MS Access SQL 还是很陌生,所以我什至不知道从哪里开始。感谢我能得到的所有帮助。

【问题讨论】:

  • 关于应该删除还是保留哪个部门或类别是否有任何逻辑?
  • 理想情况下,您将创建一个排名表,其中概述了工作类别并且是最高的。一旦你有了这个,你就可以链接表格,对它们进行相应的排序并处理重复项。

标签: sql ms-access jet-sql


【解决方案1】:

你怎么知道“最低”的工作类别是什么?

好吧,你可以这样做:

select e.*
from example as e
where e.jobcategory <> (select top (1) e2.jobcategory
                        from example e2
                        where e2.requestorid = e.requestorid
                        order by switch(jobcategory = 'President', 1,
                                        jobcategory = 'Exec Vice President', 2,
                                        jobcategory = 'Sr Vice President', 3,
                                        jobcategory = 'Vice President', 4,
                                        ) desc
                       );

【讨论】:

    【解决方案2】:

    我意识到我可以通过构造下面的代码得到我想要的结果:

    SELECT * 
    FROM TableA 
    
    UNION 
    
    SELECT * 
    FROM TableA AS a 
    RIGHT JOIN TableB AS b 
    ON a.[Requestor ID] = b.[Requestor ID] 
    WHERE a.[Requestor ID] IS NULL
    

    通过使用此代码,我将获得唯一的 Requestor ID,并且不会遇到与不同 Department 重复 Requestor ID 的问题strong>、工作类别姓名

    下面的代码导致了我面临的问题,我得到了具有不同部门工作类别请求者ID >Names,因为我无法过滤掉原始表 (TableA) 中已存在 Requestor IDs 的行。

    SELECT *
    FROM TableA
    
    UNION
    
    SELECT *
    FROM TableB
    

    谢谢大家的帮助!

    【讨论】:

      最近更新 更多