dポイントプレゼントキャンペーン実施中!

お世話になります。
テーブルが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')
以上 宜しくお願いします。

A 回答 (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
)

キーが同じレコードを対象に、更新する項目でも同じ条件で対象レコードを抽出して
更新するだけですよ。
    • good
    • 0

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
)
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/09/11 18:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!