
(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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DB2でREPLACEによる文字列の置換
-
WITH句で複数テーブルを定義す...
-
Oracleのビュー作成時に「指定...
-
重複
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
テーブルの存在チェックについて
-
アリエクで買った商品が破損し...
-
datファイルからaccessにインポ...
-
Access テキスト型に対する指定...
-
必須入力項目と入力必須項目
-
Accessレポートで特定条件で改...
-
ACCESS検索★ある文字を複数のフ...
-
Accessのテーブルを外部データ...
-
コロナ状況下のバナー広告の依...
-
INSERT INTO ステートメントに...
-
Accessのリンクテーブルのパス...
-
アクセスのクエリ-で
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
DB2でREPLACEによる文字列の置換
-
Oracle SQLにて固定長でデータ...
-
ある値以上の空き番の最小値を...
-
ORACLEで一番最初の結果だけを...
-
ROWNUMについて
-
P/L SQLで値が更新されない。
-
抽出結果を1件ずつ次の抽出条件...
-
WITH句で複数テーブルを定義す...
-
最大値の抽出
-
Access フィールドに入力した数...
-
PL/SQL 複数件同じ値で更新す...
-
SQL文についての質問
-
時間の重複を加味した連続時間S...
-
VBAのRows.Selectについて
-
ORACLEでの件数カウント方法
-
sqlplusで日本語入力
-
SELECTしながらカウント
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
おすすめ情報