【问题标题】:SQL Automatically Delete one of two duplicates [duplicate]SQL自动删除两个重复项之一[重复]
【发布时间】:2014-04-02 16:34:14
【问题描述】:

我有一个查找重复 ID 的查询

 SELECT uniqueID2, count(uniqueID2) as 'count'
                                  FROM gpDetailAfterMultiplier
                                   group by uniqueID2
                                  having count(uniqueID2) > 1

这会产生类似的输出:

uniqueID2     count
111111111       2
111111112       2
111111113       2
111111114       2

如何自动删除两个重复项之一?

我可以一次做到这一点

DELETE top(1) from gpDetailAfterMultiplier where UniqueID2 = '111111111'

有没有办法做到这一点,以便它自动“循环”每个结果并删除每个唯一 ID 的两个重复项之一?

【问题讨论】:

  • 您是否还有另一个真正独特的专栏——比如id
  • @juergend 不,不幸的是:/ 这就是为什么我需要摆脱重复项
  • 此表中还有其他列吗?
  • @shree.pat18 是,但行是精确副本
  • 另外,每个ID只有2条记录还是更多?

标签: sql sql-server


【解决方案1】:

试试这个:

WITH CTE AS(
   SELECT *,
       RN = ROW_NUMBER()OVER(PARTITION BY uniqueID2 ORDER BY uniqueID2)
   FROM gpDetailAfterMultiplier
)
DELETE FROM CTE WHERE RN > 1

它将从表中删除所有重复项。

查看Fiddle 中的结果(在小提琴中使用SELECT 查询来查看哪些记录将被删除)。

【讨论】:

  • 愿意让您的示例适应 OP 的问题吗?
  • 感谢您的回复,这将只删除两个重复项之一还是同时删除两个?
  • @neeko:它将删除除一个之外的所有其他人(参见小提琴中的结果)。
  • @neeko 这个答案有效,所以我删除了我的。
  • 为什么我的正确答案被否决了?
猜你喜欢
  • 1970-01-01
  • 2020-07-08
  • 2019-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 2016-01-12
相关资源
最近更新 更多