Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql - atualiza a coluna da tabela de outra coluna com base na ordem


Supondo que id é único para cada linha, você pode fazer isso com variáveis:
update <table> t join
       (select t.id, @rn := @rn + 1 as seqnum
        from <table> t cross join (select @rn := 0) vars
        order by old_position
       ) tt
       on tt.id = t.id
    set t.position = tt.seqnum;

Se você quiser, pode escrever isso sem a subconsulta. O desafio é definir a variável. Aqui está um método:
update <table> t
    set t.position = (@rn := coalesce(@rn, 0) + 1)
    order by old_position;

Você não pode inicializar a variável em uma subconsulta porque o MySQL não permite tanto join e order by em uma update declaração.