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

Mysql - opdater tabelkolonne fra en anden kolonne baseret på ordre

Forudsat at id er unik for hver række, kan du gøre dette 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;

Hvis du vil, kan du skrive dette uden underforespørgslen. Udfordringen er at definere variablen. Her er en metode:

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

Du kan ikke initialisere variablen i en underforespørgsel, fordi MySQL ikke tillader både join og order by i en update erklæring.




  1. Mysql datetime bliver 0000-00-00 00:00:00 i mysql version 5.6

  2. CakePHP 1.3 - Ukendt kolonne i where-sætning

  3. Sådan udføres en lagret procedure i C#-programmet

  4. Lære 2 - 2 decimaler på en flyder?