sql >> データベース >  >> RDS >> Mysql

Mysql-順序に基づいて別の列からテーブル列を更新します

    idと仮定します は行ごとに一意であるため、変数を使用してこれを行うことができます:

    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;
    

    必要に応じて、サブクエリなしでこれを記述できます。課題は変数を定義することです。これが1つの方法です:

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

    MySQLは両方のjoinを許可していないため、サブクエリで変数を初期化することはできません。 およびorder by update ステートメント。




    1. Mysqlの単一スレーブへの複数のマスターレプリケーション

    2. PostgreSQLでユーザーを作成する方法

    3. プリペアドステートメントを使用したMySQLのLIMITキーワード

    4. MySQL ORDER BY IN()