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;