人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLのUpdate文に関する質問です。
複数のテーブルの値を加減算して、特定テーブルの値を更新するSQLは、以下のテーブル例ではどのように記述すれば良いでしょうか?

(例)
・テーブルA
キー
集計項目A

・テーブルB
キー
集計項目B

・テーブルC
キー
集計項目C

・結果テーブルD
キー
結果項目D

結果テーブルDとキーが一致するレコードについて、
(集計項目A)+(集計項目B)?(集計項目C)
の計算結果を結果項目Dへ代入したいのです。

●質問者: darkhair_tachikawa
●カテゴリ:コンピュータ
✍キーワード:SQL キー レコード 更新 計算
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● うぃんど
●100ポイント ベストアンサー

ベースとしては次のようなものでいいと思うけど、RDBMSによって文法が微妙に違うし、サブクエリをうまく使えないものもあるし、

Accessなどは他のRDBMSと違ってLEFT JOINによる結合が使えたりもする

同じRDBMSでもいくつかの書き方が可能だったりして、それぞれのテーブルのレコード数によって組み方を替える時もあったりするので、

本当に知りたければ、使ってるRDBMSの名前とバージョンは明確にしたほうがいいと思う

UPDATE 結果テーブルD
SET 結果項目D = (SELECT sum(集計項目A) FROM テーブルA WHERE テーブルA.キー = 結果テーブルD.キー) 
 + (SELECT sum(集計項目B) FROM テーブルB WHERE テーブルB.キー = 結果テーブルD.キー) 
 - (SELECT sum(集計項目C) FROM テーブルC WHERE テーブルC.キー = 結果テーブルD.キー) 

該当する項目が1対1であったとしてもSQLを解析して実行計画を立てるプランナという処理部分にはわからなかったりするので「返されるレコード数は1件だけだよ」という意味でsumを使っている。別解としてLIMITを使う方法などもあるけど、このあたりもRDBMSによって何を選んだほうがいいかということになる

◎質問者からの返答

ご指摘、ご回答ありがとうございます。

共通のSQL命令で対応できるかな?と安直に考えていましたが、実行計画を考慮したり色々な書き方を調べたりするならRDBMSを明示しておくべきでしたね。

使用しているのはOracle 10gです。この他にもうまい使い方があればご回答お願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ