- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数updateする時に・・・)
複数updateする方法とは?
このQ&Aのポイント
- 複数のレコードを一度に更新する方法について調べています。
- 現在のA項目の最大値に1を足した値から順にインクリメントした値を入れたいです。
- また、同じ値を更新する場合に効率的な方法があるか知りたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ご想像通り、無理です。 ストアドプロシージャで解決できます。(多分) ただし、Primary Keyフィールドも必要でしょう。 まずMAX値を取得しておきます。 これを変数か何かにキープしておきましょう。 DECLARE cursor_id INTEGER; SELECT MAX(data) INTO cursor_id FROM sample 以下のSELECT文で変更対象となるデータのidの値に カーソルをセットし、カーソル末尾までFETCHし、 繰返します。 DECLARE c1 CURSOR FOR SELECT id FROM sample WHERE data=0 AND key=A; 繰り返す際に、 OPEN c1; FETCH c1 INTO cursor_id; WHILE cursor_id DO UPDATE sample SET data=max_val+1 WHERE id = cursor_id; FETCH c1 INTO cursor_id; SET max_val = max_val + 1; END WHILE; CLOSE c1; とやればできるのではないでしょうか? P.S. postgresで試していないので、エラーがでます。 およそこんな感じということで、、、
お礼
そうですね・・・。 ストアド(PostgreSQLだとPL/pgSQLかな・・・)にするかどうかは検討します。CGIから呼ぶのでプログラムの中でも出来るので。 有難うございました