【问题标题】:Query to update duplicates查询更新重复项
【发布时间】:2020-02-25 21:55:23
【问题描述】:

我有以下查询返回我在 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

查询的输出

查询更新

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

【问题讨论】:

    标签: sql sql-server tsql duplicates sql-update


    【解决方案1】:

    您可以使用可更新的 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 的记录保持不变,而对于其他记录,我们在Email 的末尾添加'.duplicate

    【讨论】:

    • 太棒了! dbfiddle.uk/…
    • 我投了赞成票,但仍有flaws。当有3个或更多相同条目时(这可能实际上是必需的)
    • 好吧 - 发生这种情况时我觉得还可以……:dbfiddle.uk/…
    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 2018-11-08
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多