やりたい事:
複数レコードのある項目を1度にupdateたい。
現在のA項目の最大値に+1した値から順にインクリメントした値を入れたい。
例: sampleというテーブルにkey,dataという項目があったとします。
update前 >>> update後
key|data______key|data
--+----______--+----
_A_|_1___________A_|_1_
_B_|_2___________B_|_2_
_C_|_3___________C_|_3_
_A_|_0___________A_|_4_
_A_|_0___________A_|_5_
_A_|_0___________A_|_6_
(スペースが入らなくて_にしました見にくいですが)
同じ値をupdateするなら
update sample set data=値 where key=A and data=0
これを
update sample set data=MAX(data)++ where key=A and data=0
みたいに書けたらいいなぁと思うのですが、1度該当レコードをselectして取得した値を条件に順番に1行づつupdateしないとだめですかね・・・
ちなみに環境はRedHat7.0J上のPostgreSQL7.0.2 です。
No.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から呼ぶのでプログラムの中でも出来るので。
有難うございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
副問合せの書き方について
-
エラー 1068 (42000): 複数の主...
-
DB設計について
-
Updateの複数テーブル条件時のL...
-
WHERE id = ? について
-
MySQLのint型で001と表示する方...
-
NOT INをNOT EXISTSで書き直したい
-
VIEWの元のテーブルのindexって...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
SQLにて特定の文字を除いた検索...
-
LEFT JOIN と GROUP BY
-
複数JOINしているとCOUNTが正し...
-
一つ前のレコードの値と減算し...
-
SQLで重複値を除去したものを抽...
-
Mysqlでunionを使った検索速度...
-
accessのチェックボックスをSQL...
-
順位の取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
副問合せの書き方について
-
select文のwhere句に配列を入れ...
-
マイクラPC版のコマンドで効率...
-
SQLサーバから、項目の属性(型...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] 3つのテーブルの結合で...
-
Access パラメータクエリをcsv...
-
SQLにて特定の文字を除いた検索...
-
SQL Left Join で重複を排除す...
-
ストアドのエラーについて
-
Unionした最後にGROUP BYを追加...
-
バインド変数について
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
WordpressのContact form 7でzi...
-
selectした大量データをinsert...
-
inner joinをすると数がおかし...
おすすめ情報