• 締切済み

Oracle UPDATE 文 を教えて下さい

お世話になります。 テーブルがA,Bと2つあり、Aの内容をBの内容と一致するようにUPDateしたい。 各テーブルには各々下記のフィールドがあります。 テーブルA フィールド DK、  NUM  テーブルB フィールド DKA、 DKB DK=DKAのときに 下記条件でデータセットしたいのですがUPDATE文がわかりませんご教授お願いします。 DKにDKBを NUMは20ケタのSTRINGで 1から13桁目まで元のNUMの文字を 後ろ7桁にDKBと7桁に満たない場合は頭に0を付加した文字をセットしたい。 DK=DKB NUM=concat(substr(NUM,1,13),lpad(to_char(DKB),7,'0') 以上 宜しくお願いします。

みんなの回答

回答No.2

こんな書き方でもできた気がします。 この方法なら、同一条件クエリは2つで済みますね。 UPDATE A SET (DK, NUM) = (SELECT DKB, SUBSTR(A.NUM, 1, 13) || (SELECT LPAD(TO_CHAR(B.DKB), 7, '0') FROM B WHERE A.DK = B.DKA) WHERE EXISTS ( SELECT B.DKA FROM B WHERE A.DK = B.DKA ) キーが同じレコードを対象に、更新する項目でも同じ条件で対象レコードを抽出して 更新するだけですよ。

回答No.1

UPDATE A SET DK = (SELECT DKB FROM B WHERE A.DK = B.DKA), NUM = SUBSTR(A.NUM, 1, 13) || (SELECT LPAD(TO_CHAR(B.DKB), 7, '0') FROM B WHERE A.DK = B.DKA) WHERE EXISTS ( SELECT B.DKA FROM B WHERE A.DK = B.DKA )

tya1911
質問者

お礼

naktak 様 ありがとうございます。 一意違反等でうまくいかなかったのですが ご教授頂いたSQLでうまく更新しました。 助かりました。 ご教授頂いたSQLをしっかり理解したいです。

関連するQ&A