【问题标题】:Deleting duplicates from a table using mulitple columns使用多列从表中删除重复项
【发布时间】:2016-04-18 09:47:34
【问题描述】:

我正在尝试通过在两列下查找重复项来删除表中的记录。

我已设法使用以下方法识别记录;

SELECT SiteName, Postcode 
FROM [Active Site Locations]
GROUP BY SiteName, Postcode
HAVING count(*) > 1;

但是,当我尝试运行 DELETE 以将它们从表中删除时,我得到以下信息。

DELETE FROM [Active Site Locations] 
WHERE (Select SiteName, Postcode, count(*) FROM [Active Site Locations]
GROUP BY SiteName, Postcode
HAVING count(*) >1 );

您有一个子查询可以返回多个字段,而无需在主查询的 from 子句中使用 EXISTS 保留字。修改子查询的select语句,只请求一个字段。

但是,我确实需要检查 SiteName 和 Postcode 这两个列,如果匹配,那么我需要删除它们,请有人帮忙。

【问题讨论】:

  • 我删除了 MySQL 标签。语法建议使用 MS Access。

标签: sql ms-access ms-access-2010


【解决方案1】:

这里有一种方法,它使用相关子查询计算匹配数,然后在外部查询中使用> 1 进行比较:

DELETE FROM [Active Site Locations]
WHERE (SELECT COUNT(*)
       FROM [Active Site Locations] as asl          
       WHERE asl.SiteName = [Active Site Locations].SIteName AND
             asl.Postcode = [Active Site Locations].Postcode
      ) > 1;

【讨论】:

  • 好的,所以运行了查询,但现在它删除的记录比 select 语句中显示的要多得多,这怎么能运行 select 语句我总共得到 1188 条重复的记录,但是当我运行时任何一种解决方案都会删除 2472 条记录,远远超过我预计它会删除的 1188 条记录。
  • @user2244590 。 . .如您的问题中所述,这将删除重复记录的所有版本。也许您实际上打算保留其中一项记录?如果是这样,你可以问另一个问题。也许我完全误解了意图,但这个问题似乎旨在删除所有重复记录的副本。
猜你喜欢
  • 1970-01-01
  • 2012-08-27
  • 2014-09-30
  • 2011-01-13
  • 2021-04-02
  • 2016-01-28
相关资源
最近更新 更多