- - PR -
update文について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 | ||||
|
投稿日時: 2006-12-20 12:43
DBごとでSQLの作法が違うので、
ACCESSでできたことが、oracleで出来ないこともあると思います。 まあ・・・そのSQLで本当にACCESSで動いたか疑問ですが。 とりあえず、このSQLにはテーブルBを参照する部分が欠落しています。 (from テーブルB・・・どうやるかは調べて) SQL書くのが面倒・・・ | ||||
|
投稿日時: 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初心者なもので、ヒントだけでも教えていただけますでしょうか。 | ||||
|
投稿日時: 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-12-23 02:38
Oracle 8i以上の場合、
TBLAのSIZAICOD, SAKUMOTUCOD でユニークキーがあれば
という書き方は出来ます。 |
1