删除SQL Server中的双重条目

时间:2018-05-06 16:06:35

标签: sql sql-server

我们有一个Microsoft SQL Server表[database].[dbo].[UserInAppPurchase],其中包含以下列:

   [Id]
  ,[UserEmail]
  ,[UserId]
  ,[PurchaseDate]
  ,[ProductId]
  ,[TransactionId]
  ,[OriginalTransactionId]
  ,[ValidationTime]
  ,[ValidationReceipt]
  ,[ValidFrom]
  ,[ValidTo]
  ,[Platfrom]

我们有多个条目具有相同的[TransactionID],但每TransactionID只有一行。因此,我们希望删除具有相同TransactionID的所有行,并保留具有最低[Id]的行。

感谢您的帮助

安德烈亚斯

1 个答案:

答案 0 :(得分:2)

一种不错的方法使用可更新的CTE:

with todelete as (
      select uiap.*,
             row_number() over (partition by TransactionID order by id) as seqnum
     from UserInAppPurchase uiap
    )
delete todelete
    where seqnum > 1;

当然,您可以使用与其他数据库更兼容的其他方法,例如:

delete uiap from UserInAppPurchase uiap
    where uiap.id > (select min(uiap2.id) from UserInAppPurchase uiap2 where uiap2.TransactionID = uiap.TransactionID);