
(TBL_A)
A1 A2
-----------
1 100
2 200
3 300
4 400
5 500
(TBL_B)
B1 B2
-----------
1 100
3 300
4 400
上記のようなテーブルAとBがあったとして
次のようなUPDATE文を実行することはできますか?
できない場合、SQL1発で更新する他の方法はありますでしょうか?
UPDATE TBL_A A SET
A.A1 = A.A1 + B.B1
A.A2 = A.A2 + B.B2
WHERE EXISTS
(SELECT 'X' FROM TBL_B B WHERE A.A1=B.B1)
【更新後のTBL_A表】
A1 A2
-----------
1 200 <= (*)更新される
2 200
3 600 <= (*)更新される
4 400
5 1000 <= (*)更新される
【やりたいこと】
TBL_A表のA2列のデータにTBL_B表のB2列のデータを加算したい。
その場合の更新条件として「A1がB1に存在している場合のみ」という条件を加えたいのです。
すいませんが、よろしくおねがいします。
No.2ベストアンサー
- 回答日時:
>次のようなUPDATE文を実行することはできますか?
エラーになり実行できないと思いますがどうですか???
SET文に、
A.A1 = A.A1 + B.B1
と書いても、「B.B1」がなんのことか、DB側には分かりません。
EXISTSはあくまで、「Bに存在する行を」という更新の対象の行を絞る条件にしかならないので、
SET文でBのB1値を使いたいなら連結しなくてはいけません。
副問い合わせにしたらいかがですか?
UPDATE TBL_A A
SET A.A2 =
(SELECT A.A2 + B.B2 FROM TBL_B B
WHERE A.A1 = B.B1)
WHERE EXISTS
(SELECT * FROM TBL_B B WHERE A.A1=B.B1)
こんなかんじです。
ちなみにEXISTS文なりなんなりの「A1がB1に存在している場合のみ」
というWhere句は必要です。
上記のSQLにEXISTS文がない場合、
Bに存在しないAの行(A1が2と5の場合)もUPDATE文の対象となり、
Bとの連結の結果がNULL値になるので、
その行のA2の値がNULLで更新されてしまいます。
NULL値の加算はNULLだからです。
↓以下のようになります。
A1 A2
-----------
1 200
2 Null
3 600
4 800
5 Null
あまり意味がわからないかもしれませんが、
とりあえず、簡単なテーブルでも作って、
試してみてはいかがでしょうか。
No.1
- 回答日時:
>次のようなUPDATE文を実行することはできますか?
という問いに対しては、
update TBL_A
set
A1=A1 + (select B1 from TBL_B where A1=B1),
A2=A2 + (select B2 from TBL_B where A1=B1)
where A1 in (select B1 from TBL_B);
で書けますが・・
>【やりたいこと】
>TBL_A表のA2列のデータにTBL_B表のB2列のデータを加算したい。
>その場合の更新条件として「A1がB1に存在している場合のみ」という条件を加えたいのです。
に沿ったSQLを書くなら・・
update TBL_A
set
A2=A2 + (select B2 from TBL_B where A1=B1)
where A1 in (select B1 from TBL_B);
で良いはずです。
なんで、A1へB1を加算するようなSQLを書くのか理解できません。
また、更新後のTBL_Aのサンプルも、【やりたいこと】とは
一致していません。(A1=4 および 5 に対する結果)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Oracle SQL update方法 2 2022/06/22 14:07
- 統計学 個別の期待値は小さいけど集計すると期待値は大きくなる場合とは? 4 2022/06/14 08:27
- Visual Basic(VBA) フォーム上のリストボックスに重複して表示しています 3 2022/10/19 11:55
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Excel(エクセル) Google Spreadsheetのカスタム表示形式について 2 2023/05/20 09:10
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Excel(エクセル) エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります 1 2022/11/14 21:03
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
エクセルグラフの凡例スペース
-
セルの右クリックで出る項目を...
-
Accessでテーブル名やクエリ名...
-
エクセルVBAで5行目からオート...
-
Accessのクエリでデータの入力...
-
桐の集計(集計行設定のこと)...
-
Accessでテーブルからテーブル...
-
Excel→Accessへ貼り付けがおかしい
-
データベース内のテーブル名の取得
-
SQL*Loaderでのゼロ埋め
-
Accessのリンクテーブルのパス...
-
Accessでテーブルの値をテキス...
-
INSERT INTO ステートメントに...
-
Accessのフィールド数が255しか...
-
SQLでグループ化した結果の件数...
-
Accessで、固定アルファベット+...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DB2でREPLACEによる文字列の置換
-
ORACLEで一番最初の結果だけを...
-
Oracleのビュー作成時に「指定...
-
Oracle SQLにて固定長でデータ...
-
ROWNUMについて
-
抽出結果を1件ずつ次の抽出条件...
-
ある値以上の空き番の最小値を...
-
時間の重複を加味した連続時間S...
-
WITH句で複数テーブルを定義す...
-
sqlplusで日本語入力
-
P/L SQLで値が更新されない。
-
VBAのRows.Selectについて
-
動的SQLでのDECODE
-
distinct で抽出したレコード件数
-
ACCESS クエリーから件数取得
-
SELECTしながらカウント
-
PL/SQL 複数件同じ値で更新す...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
おすすめ情報