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

Postgres8.4の各行に対して1回呼び出される関数で更新します

    Postgresの非標準のUPDATE .. FROMを試しましたか 句?私は想像します、これはうまくいくでしょう

    update mytable
       set a = first_part(gen.id),
           b = second_part(gen.id),
           c = third_path(gen.id)
      from (
              select genid() as genid, id
              from mytable 
              where package_id = 10
           ) gen
     where mytable.id = gen.id;
     --and package_id = 10 -- This predicate is no longer necessary as the subquery
                           -- already filters on package_id, as Erwin mentioned
    

    genid()を強制していることに注意してください mytableのレコードごとに1回だけ呼び出されます 副選択内。それから私はmytableに自己参加しています およびgen 架空のidを使用する 列。ここのドキュメントを参照してください:

    http://www.postgresql.org/docs/current/interactive /sql-update.html

    ただし、これはPostgres9.0でのみ導入されたようです。 それが複雑すぎる(つまり、あまり読みにくい)場合でも、ユーザーフローリンはここで提案されました



    1. SqlalchemyがWHERE句をFROMに複製しました

    2. LaravelでgroupBy()関数を使用した合計クエリ

    3. チューニング:開始するのに適した場所

    4. Oracle SQL照合