(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を探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
PL/SQL 複数件同じ値で更新す...
-
DB2でREPLACEによる文字列の置換
-
ROWNUMについて
-
sqlplusで日本語入力
-
ORACLEで一番最初の結果だけを...
-
抽出結果を1件ずつ次の抽出条件...
-
P/L SQLで値が更新されない。
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
エクセルVBAで5行目からオート...
-
Accessのフィールド数が255しか...
-
Accessでテーブル名やクエリ名...
-
セルの右クリックで出る項目を...
-
テーブルの存在チェックについて
-
FROM の中で CASE を使えるでし...
-
ACCESSで400以上のフィールドが...
-
Access テキスト型に対する指定...
-
importについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracleのビュー作成時に「指定...
-
DB2でREPLACEによる文字列の置換
-
Oracle SQLにて固定長でデータ...
-
ROWNUMについて
-
抽出結果を1件ずつ次の抽出条件...
-
ORACLEで一番最初の結果だけを...
-
ある値以上の空き番の最小値を...
-
P/L SQLで値が更新されない。
-
時間の重複を加味した連続時間S...
-
PL/SQL 複数件同じ値で更新す...
-
ACCESS クエリーから件数取得
-
distinct で抽出したレコード件数
-
sqlplusで日本語入力
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
Access テキスト型に対する指定...
-
Accessでテーブルの値をテキス...
おすすめ情報