Обновить значения столбца int mysql - PullRequest
0 голосов
/ 06 мая 2020

Я хочу обновить значения столбца int, где я хочу установить значение столбца int равным 1 для последней вставленной записи и увеличить его на 1 для всех предыдущих записей, пока не появится запись с Primary Id = 1 достигается. У меня около 1400 записей, поэтому я хочу, чтобы запись 1400 получила 1 для этого столбца int, а 1399 - 2 и так далее, пока все записи не будут завершены. Как следует написать запрос на обновление, чтобы этого можно было достичь. Спасибо

Обратите внимание, что это будет одноразовая операция.

1 Ответ

0 голосов
/ 06 мая 2020

Если вы используете MySQL 8.0, вы можете использовать row_number() для этого. Предполагая, что у вас есть уникальный упорядочивающий столбец с именем id и вы хотите обновить столбец new_id:

update mytable t
inner join (select id, row_number() over(order by id desc) new_id from mytable) x
    on t.id = x.id
set t.new_id = x.new_id

В более ранних версиях одним из вариантов является эмуляция функции окна с помощью пользовательской переменной :

update mytable t
inner join (
    select t.id, @new_id := @new_id + 1 new_id
    from (select id from mytable order by id desc) t
    cross join (select @new_id := 0) x
) x on t.id = x.id
set t.new_id = x.new_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...