質問させていただきます。
OracleのUPDAE文を作成しています。
以下のようなSQLを作成したところ、問題無く動きました。
①
UPDATE テーブルA A
SET A.支払金額 = (SELECT B.支払金額
FROM テーブルB B
WHERE B.コード = A.コード )
そこで、テーブルAの「コード=XXX」のデータだけ更新しようします。
②
UPDATE テーブルA A
SET A.支払金額 = (SELECT B.支払金額
FROM テーブルB B
WHERE B.コード = A.コード )
WHERE A.コード = 'XXX'
このSQLも問題無く動きます。
ただ、以下に変更すると、「A.支払金額にNULLを更新できない」と怒られます。
③
UPDATE テーブルA A
SET A.支払金額 = (SELECT B.支払金額
FROM テーブルB B
WHERE B.コード = A.コード
AND A.コード = 'XXX' )
なぜ②はいいのに、③はだめなのでしょう?
また、AとBの支払金額が異なるデータのみUPDATEしたいと思い
以下のSQLを実行しましたが、③と同じエラーになります。
④
UPDATE テーブルA A
SET A.支払金額 = (SELECT B.支払金額
FROM テーブルB B
WHERE B.コード = A.コード
AND A.支払金額 = B.支払金額)
条件なので、③も④も動くと思っていたのですが、
なぜ実行できないのかわかっていません。
わかる方、教えていただけると嬉しいです。
No.2ベストアンサー
- 回答日時:
②
UPDATE テーブルA A
SET A.支払金額 = (SELECT B.支払金額
FROM テーブルB B
WHERE B.コード = A.コード )
WHERE A.コード = 'XXX'
これを日本語に翻訳すると、以下のようになります。
ーーーーーーーーーーーーーーーーーーーーーーー
テーブルA の A.コード が 'XXX' のものについて更新する。
そのとき、A.支払金額 には B.コード が A.コード である B.支払金額 を代入する。
ーーーーーーーーーーーーーーーーーーーーーーー
③
UPDATE テーブルA A
SET A.支払金額 = (SELECT B.支払金額
FROM テーブルB B
WHERE B.コード = A.コード
AND A.コード = 'XXX' )
テーブルA の すべてのレコードを更新する。
そのとき、A.支払金額 には B.コード が A.コード でかつ 'XXX' である B.支払金額 を代入する。
(上記条件に当てはまらない場合は、B.支払金額 は NULL を返す。そして、A.支払金額 が NULL を受け付けない設定ならばエラーとなる。)
ご回答ありがとうございます。
ご説明いただき、すっきりしました。
A.支払金額がNULL登録可能だったら、
データがおかしくなるところでした。。。
No.3
- 回答日時:
③と④は全レコードが更新対象ですからね。
当たり前です。
それに対して更新する値として、特定のコードで条件ぶつけても、結合条件に合致するレコードがなかったからnull更新になり、その項目はnot nullなんでしょうね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
- Access(アクセス) MAXで0が出力される 1 2022/03/31 21:43
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 神奈川県の市区町村の一覧。ただ 3 2023/05/01 18:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
重複するキーから一番古い年月...
-
ACCESSのコンパイルエラーについて
-
SELECT時にカウントアップ
-
日付の最大値を検索条件にする方法
-
主キーの変更
-
Inner join と Left joinの明...
-
PLSQLの識別子エラー
-
Accessユニオンクエリーで2つ...
-
2つのテーブルから条件に一致...
-
Access SQLを使ったソートがずれる
-
【SQL】group byについて
-
SQL結合条件
-
sqlで質問です。 Aテーブルは店...
-
ACCESSのSQLで、NULLかNULLでな...
-
SELECT時の行ロックの必要性に...
-
sqlserverで集計結果をUPDATEし...
-
2つの項目が重複するレコード...
-
数百万件レコードのdelete
-
ACCESS2007 フォーム 「バリア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
ACCESS 一つのフィールドに複...
-
行方向のデータを横に並べる
-
SQLについて質問です。 テーブ...
-
VIEWでテーブルの集計結果...
-
SQL 2つのテーブルとSUBSTRING...
-
PLSQLの識別子エラー
-
accessで移動平均する方法
-
片方だけ抽出する方法(SQL)
-
[Oracle] UPDATE分の副問い合わ...
-
場合によって条件を変えるSQL
-
Accessユニオンクエリーで2つ...
-
続.ORACLEのSELECTのソートに...
-
履歴を管理するテーブル構造に...
-
連番のMin, Maxを取得したい
-
Inner join と Left joinの明...
-
PLSQLで集計関数の値を配列に入...
-
商品コード番号を入力すると商...
おすすめ情報