sql >> Database >  >> RDS >> Mysql

Mysql - update tabelkolom uit een andere kolom op basis van volgorde

Ervan uitgaande dat id is uniek voor elke rij, je kunt dit doen met variabelen:

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;

Als je wilt, kun je dit schrijven zonder de subquery. De uitdaging is het definiëren van de variabele. Hier is een methode:

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

U kunt de variabele niet initialiseren in een subquery omdat MySQL beide join niet toestaat en order by in een update verklaring.




  1. Log elke MySQL-query in een bestand door het algemene logboek in MAMP in te schakelen

  2. Kan GI 12.1.0.2 en Segmentatiefout niet compileren

  3. Hoe installeer ik MySQL en het Python MySQL-pakket op OS X Leopard? Of hoe leer ik over het zijn van een webontwikkelaar met OS X?

  4. Codeigniter - meerdere databaseverbindingen