查询以更新重复项

时间:2019-10-30 14:53:16

标签: sql sql-server

我有以下查询,该查询返回在SQL Server上运行的重复项。因此,我需要编写一个查询,该查询将基于选择查询(例如,将重复信息复制到)来更新电子邮件地址的第二个实例 import@rohnis.com到imports@rohnis.com.duplicate。如果是info@eps.ws,则为info@eps.ws.duplicate。所以基本上是后缀 带有重复字样的电子邮件地址。可以是任何电子邮件地址

查询以搜索重复项

SELECT ta.Id
      ,ta.Email
      ,ta.ClientCompanyId

FROM [IdentityDB_CSR].[dbo].[User] ta
WHERE (SELECT COUNT(*)
       FROM [IdentityDB_CSR].[dbo].[User] ta2
       WHERE ta.Email=ta2.Email
       AND ta.ClientCompanyId=ta2.ClientCompanyId)>1

查询的输出

enter image description here

查询更新

update [IdentityDB_CSR].[dbo].[User]
  set Email = 'info@eps.ws.duplicate'
  where id = 87183

1 个答案:

答案 0 :(得分:2)

您可以使用可更新的CTE:

with cte as (
    select
        Email,
        row_number() over(partition by Email, ClientCompanyId order by id desc) rn
    from [IdentityDB_CSR].[dbo].[User]
)
update cte 
set Email = Email + '.duplicate'
where rn > 1

这会将重复项标识为共享相同的EmailClientCompanyId的记录。 id最高的记录保持不变,而对于其他记录,我们在'.duplicate的末尾添加Email