こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

複数テーブルによるupdate方法

A,B,Cという3つのテーブルがあり、下記条件でupdateを行いたいのですが、
方法をご教授頂けますでしょうか?
環境はOracle9iです。

<条件>
・AテーブルのCAL1・CAL2を、BテーブルのCAL3・CAL4で更新したい
・Aテーブルのレコードのうち、CテーブルにNOが存在するレコードのみupdateしたい

 Aテーブルキー項目:NO,SEQ(PKは別の項目)
 BテーブルPK:NO,SEQ
 CテーブルPK:NO

◆ダメだったSQL(1)
set句のサブクエリ内が複数件ヒットしてしまうのでダメでした。

update A a
set (a.CAL1, a.CAL2) = (
select
b.CAL3,
b.CAL4
from
A a,
B b,
C c
where
a.NO = b.NO and
a.SEQ = b.SEQ and
a.NO = c.NO
)
where
a.NO in(select distinct x.NO from A x,C y where x.NO = y.NO)
/


◆ダメだったSQL(2)
NO,SEQが、テーブルAのPKでないので
「キー保存されていない表にマップする列は変更できません」となりダメでした。

update(
 select
  a.NO     aNO,
  a.NO     aSEQ,
  a.COL1   aCOL1,
  a.COL2   aCOL2,
  b.NO     bNO,
  b.SEQ    bSEQ,
  b.COL3   bCOL3,
  b.COL4   bCOL4,
  c.NO     cNO
 from
  A a,
  B b,
  C c
 where
  a.NO = b.NO and
  a.SEQ = b.SEQ and
  a.NO = c.NO
)
set aCOL1=bCOL3, aCOL2=bCOL4

いろいろ試したのですがうまくできません。
お手数ですが、アドバイス頂けると助かります。

投稿日時 - 2017-08-28 16:59:44

QNo.9368099

困ってます

回答(0)

この質問にはまだ回答がついていません。
あなたが最初に回答してみませんか?

あなたにオススメの質問