
質問させていただきます。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
重複するキーから一番古い年月...
-
PLSQLの識別子エラー
-
行方向のデータを横に並べる
-
VIEWでテーブルの集計結果...
-
主キーの変更
-
2つのテーブルから条件に一致...
-
Accessでフィールドを比較した...
-
続.ORACLEのSELECTのソートに...
-
履歴を管理するテーブル構造に...
-
データベースの問題
-
accessで移動平均する方法
-
SQL文について(片方のテーブル...
-
ACCESS2007 フォーム 「バリア...
-
seoについておしえてください
-
SQLデータ修正時に『このレコー...
-
SI Object Browserのテーブルス...
-
SELECT文でのデッドロックに対...
-
オラクルではできるのにSQLSERV...
-
SELECT時の行ロックの必要性に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「マスタ」と「テーブル」の違...
-
2つのテーブルから条件に一致...
-
重複するキーから一番古い年月...
-
主キーの変更
-
update文で質問です。 下記の条...
-
ACCESS 一つのフィールドに複...
-
続.ORACLEのSELECTのソートに...
-
accessで移動平均する方法
-
行方向のデータを横に並べる
-
Accessでフィールドを比較した...
-
PLSQLの識別子エラー
-
商品コード番号を入力すると商...
-
ACCESSのデータシート形式のフ...
-
複数InnerJoin時の処理落ち回避法
-
Accessのテーブル設計について...
-
正規化・リレーションシップに...
-
Accessのコンボボックスの使い...
-
データベースの問題
-
ACCESSのコンパイルエラーについて
-
SQL結合条件
おすすめ情報