Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL - Aktualisieren Sie die Tabellenspalte von einer anderen Spalte basierend auf der Reihenfolge

Angenommen, diese id für jede Zeile eindeutig ist, können Sie dies mit Variablen tun:

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;

Wenn Sie möchten, können Sie dies auch ohne die Unterabfrage schreiben. Die Herausforderung besteht darin, die Variable zu definieren. Hier ist eine Methode:

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

Sie können die Variable nicht in einer Unterabfrage initialisieren, da MySQL nicht beide join zulässt und order by in einem update Aussage.