MySQL запрос на обновление дублирующихся записей

Я хочу, чтобы обновление SQL было таким, чтобы:

Предположим, у меня есть следующая таблица в базе данных MySQL

названия

название документа
1 привет
2 привет
3 привет
4 Sometext
5 привет
6 привет

Я хочу, чтобы эта таблица была обновлена ​​так, чтобы были уникальные заголовки.

названия

название документа
1 привет
2 привет1
3 привет
4 Sometext
5 привет1
6 привет2

На самом деле я работаю над сценарием миграции, в котором ограничение "Уникальные заголовки" изначально не использовалось.

2 ответа

Решение
update titles t
inner join
(
SELECT    id,
          title,
          case when title=@curTitle then @curRank := @curRank + 1 else @curRank:=0 end,
          @curTitle:=title,
          @curRank as rank
FROM      titles t, (SELECT @curRank := 0,@curTitle="") r
ORDER BY  title
) t1 on t1.id = t.id
set t.title = concat(t1.title,case when rank = 0 then "" else rank end)
;

Или, возможно, более эффективным способом было бы взять ответ Strawberry и превратить его в утверждение UPDATE аналогичным образом...

Следовательно:

update titles t
inner join 
(
SELECT x.id
     , concat(x.title,CASE WHEN y.id IS NOT NULL THEN COUNT(y.id) ELSE "" END) newTitle 
from titles x
  LEFT 
  JOIN titles y 
    ON y.title = x.title 
   AND y.id < x.id 
 GROUP 
    BY x.id
) t1 on t1.id = t.id
set t.title = t1.newTitle
;
SELECT x.*
     , CASE WHEN y.id IS NOT NULL THEN COUNT(y.id) ELSE '' END rank 
  FROM titles x 
  LEFT 
  JOIN titles y 
    ON y.title = x.title 
   AND y.id < x.id 
 GROUP 
    BY x.id;
Другие вопросы по тегам