sql >> Databasteknik >  >> RDS >> Mysql

Mysql - uppdatera tabellkolumnen från en annan kolumn baserat på beställning

Förutsatt att id är unik för varje rad kan du göra detta med variabler:

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;

Om du vill kan du skriva detta utan underfrågan. Utmaningen är att definiera variabeln. Här är en metod:

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

Du kan inte initiera variabeln i en underfråga eftersom MySQL inte tillåter både join och order by i en update uttalande.




  1. Fel java.lang.ClassNotFoundException:com.mysql.jdbc.Driver när JAR kördes via kommandoraden

  2. Oracle Database TLS1.2 / SSL-anslutning med JDBC thin och JKS

  3. Korrekt sätt att ladda upp binär fil till MySQL genom Spring MVC

  4. GROUP BY med MAX(DATE)