Как обновить столбец всех повторяющихся записей в MySQL

0

У меня есть таблица в MYSQL с этими столбцами и данными.

  • id = name
  • 1 = тест
  • 2 = тест
  • 3 = тест
  • 4 = нормально
  • 5 = нормально
  • 6 = нормально
  • 7 = да
  • 8 = нет

Как я могу автоматически обновлять столбцы "name"?

  • id = name
  • 1 = тест
  • 2 = test1
  • 3 = test2
  • 4 = нормально
  • 5 = ok1
  • 6 = ok2
  • 7 = да
  • 8 = нет
  • 0
    Пожалуйста, посмотрите на это сообщение в блоге - оно должно помочь вам thesqlserverdeveloper.blogspot.com/2018/03/… - вместо удаления обновляйте по мере необходимости
  • 0
    Я не хочу удалять дубликаты. Я хочу переименовать строку дубликатов.
Показать ещё 1 комментарий
Теги:
database

3 ответа

0

Создайте подзапрос, чтобы получить последовательность чисел на основе имени. Затем соответствующим образом обновите таблицу. Смотрите демонстрацию здесь: 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;
0

Я бы сделал это с помощью переменных.

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;
0

Попробуйте что-то вроде этого:

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
  • 0
    если версия mysql не 8.0; номер строки () не будет работать

Ещё вопросы

Сообщество Overcoder
Наверх
Меню