sql >> Base de Datos >  >> RDS >> Mysql

Mysql:actualice la columna de la tabla desde otra columna según el orden

Asumiendo que id es único para cada fila, puede hacerlo con variables:

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;

Si lo desea, puede escribir esto sin la subconsulta. El desafío es definir la variable. Aquí hay un método:

update <table> t
    set t.position = (@rn := coalesce(@rn, 0) + 1)
    order by old_position;

No puede inicializar la variable en una subconsulta porque MySQL no permite ambos join y order by en una update declaración.