sql >> Databáze >  >> RDS >> Mysql

Mysql - aktualizace sloupce tabulky z jiného sloupce na základě objednávky

Za předpokladu, že id je jedinečný pro každý řádek, můžete to provést pomocí proměnných:

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;

Pokud chcete, můžete to napsat bez poddotazu. Úkolem je definovat proměnnou. Zde je jedna metoda:

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

Proměnnou nelze inicializovat v dílčím dotazu, protože MySQL neumožňuje obě join a order by v update prohlášení.




  1. django.db.utils.ProgrammingError:vztah již existuje

  2. Převést „smalldatetime“ na „datum“ v SQL Server (příklady T-SQL)

  3. Tvůrce dotazů nevkládá časová razítka

  4. sql:vyberte položky s nejvyšším počtem hlasů od každého uživatele