やりたい事:
複数レコードのある項目を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で質問しましょう!
似たような質問が見つかりました
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
- Oracle SQL update方法 2 2022/06/22 14:07
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- PHP PHPSpreadsheetによる書き出し時のページネーション方法について 1 2023/03/20 10:35
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- Java Java 南京錠 2 2023/02/04 11:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
[MySQL] UNIQUE制約の値を更新...
-
select文のwhere句に配列を入れ...
-
SQLにて特定の文字を除いた検索...
-
selectした大量データをinsert...
-
エクセルの関数について教えて...
-
sqlで、600行あるテーブルを100...
-
MySQLのint型で001と表示する方...
-
VIEWの元のテーブルのindexって...
-
複数テーブルのGROUP BY の使い...
-
Unionした最後にGROUP BYを追加...
-
Access パラメータクエリをcsv...
-
LAST_INSERT_IDで同時にアクセ...
-
PL/SQLの変数について
-
[SQLServer] テーブル名からカ...
-
VMwareがCDドライブを認識する...
-
1対多結合で多を絞り込み条件と...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
VIEWの元のテーブルのindexって...
-
select文のwhere句に配列を入れ...
-
selectした大量データをinsert...
-
センノシド異性体構造式
-
Unionした最後にGROUP BYを追加...
-
insertを高速化させたい
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
sqlで、600行あるテーブルを100...
-
エクセルの関数について教えて...
-
Access パラメータクエリをcsv...
-
URL と行番号の指定
-
複数テーブルのGROUP BY の使い...
-
PL/SQLの変数について
おすすめ情報