前提・実現したいこと
タイトルの通り、SQLで結合した結果のテーブルを更新したいです。
環境はoracle11g、使用しているエディタはA5エディタです。
発生している問題・エラーメッセージ
ORA-01779: キー保存されていない表にマップする列は変更できません
該当のソースコード
実際はもっと複雑なのですが、関連性がある部分だけ記載します。 テーブルA A1:テーブルAの主キー A2:制約の無いデータ テーブルB B1:テーブルBの主キー A1:テーブルAの主キーを保有している。外部制約などは無い。 A2:新しく追加したカラム。現在全部null ・テーブルAが親、テーブルBが子供の関係 ・テーブルAの1行に対して、テーブルBは複数行存在する ・テーブルBは親であるテーブルAの主キーをレコード上保有しているが、DB上は不整合な値も登録は可能 上記の状態でテーブルBに新しく追加したA2カラムにテーブルAのA2の値をSQLで登録したいです。 (A1の値が同じレコードには同じA2が登録されて欲しい)
試したこと
update (
select テーブルB.A2 as A2_new、テーブルA.A2 as A2_old
from テーブルB left outer join テーブルA on テーブルB.A1 = テーブルA.A1
)
set A2_new = A2_old
上記SQLでupdateしようとするとORA-01779が発生しました。
調べてみたら更新するレコードが一意にならない場合に発生するエラーのようですが、子データから親データを見ると一意になるのでは?と考えています。
merge構文でも試してみましたがそちらはORA-30926エラーが発生しました。
発行したmergeのSQLは手元に無く、すぐに記載できそうにないです。すみません。
確認できたら、改めて追記します。
あまりにも上手くいかず、全然見当外れの調べ方をしているのではないかと不安になり、こちらで質問させていただきました。調べる視点や、疑うべき箇所などヒントになりそうな部分があれば教えてください。
質問している現在SQLを発行できる環境にいないので、追記が必要そうな場合は後日追記します。
補足情報(FW/ツールのバージョンなど)
特になし

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/27 14:23