У меня есть таблица в MYSQL с этими столбцами и данными.
Как я могу автоматически обновлять столбцы "name"?
Создайте подзапрос, чтобы получить последовательность чисел на основе имени. Затем соответствующим образом обновите таблицу. Смотрите демонстрацию здесь: http://sqlfiddle.com/#!9/439b96/2
UPDATE yourTable t1
JOIN (SELECT a.id,
case when count(*)=1
then a.name
else concat(a.name,count(*)-1)
end as new_name
FROM yourTable a
JOIN yourTable b ON a.name = b.name AND a.id >= b.id
GROUP BY a.id, a.name) t2
ON t1.id=t2.id
SET t1.name=t2.new_name;
Я бы сделал это с помощью переменных.
set @n = '';
set @rn = -1;
update t
set name = concat(name,
(case when @n = name and @rn = -1
then if(@rn := 0, '', '')
when @n = name
then @rn := @rn + 1
when @n := name
then if(@rn := 0, '', '')
end)
)
order by name, id;
Попробуйте что-то вроде этого:
update a set a.name=a.name+cast(rownum-1 as varchar) from #original a
join
(select *, row_number() OVER (partition by name ORDER BY name, id) rownum from #original)b
on a.id=b.id
where rownum<>1