Запрос на обновление дубликатов - PullRequest
0 голосов
/ 30 октября 2019

У меня есть следующий запрос, который возвращает дубликаты, которые я запускаю на сервере SQL. Поэтому мне нужно написать запрос, который обновит второй экземпляр адреса электронной почты на основе запроса select, который извлекает дубликаты, например на import@rohnis.com к import@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 Ответ

2 голосов
/ 30 октября 2019

Вы можете использовать обновляемый 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

Это идентифицирует дубликаты как записи, которые имеют одинаковые Email и ClientCompanyId. Запись с наибольшим значением id остается без изменений, в то время как для других мы добавляем '.duplicate в конце Email.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...