Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql:aggiorna la colonna della tabella da un'altra colonna in base all'ordine

Supponendo che id è unico per ogni riga, puoi farlo con le variabili:

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 lo desideri, puoi scriverlo senza la sottoquery. La sfida è definire la variabile. Ecco un metodo:

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

Non puoi inizializzare la variabile in una sottoquery perché MySQL non consente entrambi join e order by in un update dichiarazione.