- PR -

update文について

1
投稿者投稿内容
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2006-12-20 12:14
nakamuraと申します。
Oracle10gでテーブルAとテーブルBを連結し、テーブルAの各列にテーブルBの各列を
セットするupdate文を作成しました。accessのクエリで実行するとエラーになってしまいます。そもそもaccessのようにupdate文でinner join等の結合は普通に出来るのでしょうか。これが出来ないとupdateされる側のテーブルAを1件ずつ読み込み、テーブルBの
値があればその値をセットして更新するやり方でしかOracleはないのでしょうか?
どなたか下記にサンプルsqlを記載しますのでご教授願います。
UPDATE テーブルA
SET テーブルA.PRTNAM1 = テーブルB.aaa,
テーブルA.PRTNAM2 = テーブルB.bbbb,
テーブルA.PRTNAM3 = テーブルB.bbb,
テーブルA.PRTNAM4 = テーブルB.ccc
WHERE (テーブルB.資材コード = テーブルA.SIZAICOD)
AND (テーブルB.作物コード = テーブルA.SAKUMOTUCOD)
AND テーブルA.SIZAICOD Is Not Null
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2006-12-20 12:43
DBごとでSQLの作法が違うので、
ACCESSでできたことが、oracleで出来ないこともあると思います。

まあ・・・そのSQLで本当にACCESSで動いたか疑問ですが。

とりあえず、このSQLにはテーブルBを参照する部分が欠落しています。
(from テーブルB・・・どうやるかは調べて)
SQL書くのが面倒・・・
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2006-12-20 13:27
KOXさん、レスありがとうございます。あのsqlではaccessでは動いていません。
access側ではinner joinを使用して動きました。
UPDATE TBLA INNER JOIN TBLB ON
(TBLA.SIZAICOD = TBLB.aaa)
AND (TBLA.SAKUMOTUCOD = TBLB.bbb)
SET TBLA.PRTNAM1 = TBLB.ccc,
TBLA.PRTNAM2 = TBLB.ddd,
TBLA.PRTNAM3 = TBLB.eee,
TBLA.PRTNAM4 = TBLB.fff,
TBLA.UPDYMD = now()
WHERE TBLA.SIZAICOD Is Not Null
selectのinner joinは使用できるのですが。。。
SQL初心者なもので、ヒントだけでも教えていただけますでしょうか。
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2006-12-20 15:40
selectができているなら、それをupdateに変換するだけ。
といいたいところですが、結構面倒なんですよね。

ちょっと忙しいので簡単に。
UPDATE TBLA A
SET
(A.XXX,A.YYY,A.ZZZ ) =
SELECT B.XXX,B.YYY,B.ZZZ FROM TBLB B WHERE XXXXXXX
)
WHERE
XXXXXXXXX

#たしか・・こんな感じ。
#動作検証してないし、速度も無視です。
かずくん
会議室デビュー日: 2006/02/21
投稿数: 9
投稿日時: 2006-12-23 02:38
Oracle 8i以上の場合、
TBLAのSIZAICOD, SAKUMOTUCOD でユニークキーがあれば

コード:
UPDATE (
    SELECT TBLA.PRTNAM1
         , TBLA.PRTNAM2
         , TBLA.PRTNAM3
         , TBLA.PRTNAM4
         , TBLA.UPDYMD
         , TBLB.ccc
         , TBLB.ddd
         , TBLB.eee
         , TBLB.fff
         , SYSDATE sd
      FROM TBLA 
     INNER JOIN TBLB
        ON TBLA.SIZAICOD = TBLB.aaa
       AND TBLA.SAKUMOTUCOD = TBLB.bbb
     WHERE TBLA.SIZAICOD Is Not Null
)  SET PRTNAM1 = ccc
     , PRTNAM2 = ddd
     , PRTNAM3 = eee
     , PRTNAM4 = fff
     , UPDYMD =  sd;



という書き方は出来ます。
1

スキルアップ/キャリアアップ(JOB@IT)