• ベストアンサー

別のテーブルの値でUPDATEしたいのですが

Oracle8iデータベースのSQL文で困っています。 以下のような2つの表があります。 ※表の構成は似ていますが、同じではありません。 [表A]  列1 ・・・ 主キー  列2 ・・・ 主キー  列3  列4 [表B]  列1 ・・・ 主キー  列2 ・・・ 主キー  列3  列4 表Aと表Bの主キーが一致するデータについて、 表Aを表Bの値でUPDATEしたいのですが、 どのように記述すればよいでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 こんな感じでどうでしょう? update 表A set (列3,列4) = (SELECT 表B.列3,表B.列4 FROM 表B WHERE 表A.列1 = 表B.列1 AND 表A.列2 = 表B.列2); ユーザ登録 (無料) が必要ですが、OTN Japan で PDF 形式のマニュアルを公開していますので、 Download しておくと便利ですょ。

参考URL:
http://otn.oracle.co.jp/
yuyu-chan
質問者

お礼

できました、ありがとうございました! OTN Japan の情報もありがとうございました。 参考にさせていただきます。

その他の回答 (2)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

Oracle8iはJoinを使えません。 副問い合わせでしかできません。 update 表A set (列3,列4) = (表B.列3,表B.列4) where (列1, 列2) in (select 表B.列1, 表B.列2 from 表B where 表A.列1 = 表B.列1 and 表A.列2 = 表B.列2) こんなかな?

yuyu-chan
質問者

お礼

ありがとうございます。 でも、「ORA-01767: UPDATE ... SET式は副問合せである必要があります」というエラーになってしまいます。

回答No.1

たぶん、こんな感じでできるのではないでしょうか。 UPDATE A JOIN B ON A.列1 = B.列1 AND A.列2 = B.列2 SET A.列3 = B.列3, A.列4 = B.列4;

yuyu-chan
質問者

お礼

ありがとうございます。 でも、「JOIN」でエラーになってしまいます。。。

関連するQ&A

  • 別テーブルの値をsetしてupdateしたい

    テーブルAとテーブルBで、idが一致したデータのみ、 テーブルAのフィールドにテーブルBの値を入れたいです。 tera termを使用して、 UPDATE tableA as a, tableB as b SET a.value = b.value WHERE a.id = b.id 上記のupdate文を流すと一行目の[as a]からsyntaxエラーが出ます。 ERROR 1064: You have an error in your SQL syntax near 'as a, tableB as b SET ~' at line 1 書き方が悪いのでしょうか? どのように記述すればb.valueをa.valueにsetできますか?

    • ベストアンサー
    • MySQL
  • UPDATE文のWHERE条件に他のテーブルのフィールドも入れたい

    SQL文についてです。 表Aで列1と列2が'◎'のものについて、列3,列4,列5をそれぞれ'○','△','×'に更新したい場合は下記でOKだと思います。 UPDATE 表A SET 列3 = '○', 列4 = '△', 列5 = '×' WHERE 列1 = '◎' AND 列2 = '◎' 列1と列2をキーとして表Aと結合できる表Bが存在するとします。 条件に表Bの列6が'□'だった場合を追加したい時、どのような方法で行えば良いのでしょうか? 内部結合やWHERE EXISTSなどをいろいろ調べたのですが、SQL文に慣れていないためかうまくいきません。 初歩的な質問で申し訳ありませんが過去質問で参考になるものがなかったのでお願いします。

  • Oracle8iのUPDATE文

    はじめまして、似た質問があったのですが解決には至らなかったので質問させていただきます。 表A 列1…主キー 列2 --中略-- 列8 表B 列1…主キー 列 --中略-- 列8 このような二つの表があり、列1は表Bにあるものはすべて表Aにありますが、 表Aの列1には表Bの列1にはないものがあります。 それ以外の列構造は同じですがデータはすべて異なっています。 表AとBの列1の値が同じものは、表Aの列8を表Bの列8で上書きをしたいです。 UPDATE 表A SET 表A.列8 = (SELECT 表B.列8 FROM 表B WHERE 表A.列1 = 表B.列2) WHERE 表A.列1 =ANY(SELECT 表B.列1 FROM 表B) このUPDATE文を実行すると、 ORA-01427: 単一行副問合せにより2つ以上の行が返されます。 というエラーになってしまいます。 検索などして、調べてみたのですが、このエラーから抜けることができません。 アドバイスをいただけたらと、投稿させていただきました。 よろしくお願いします

  • 同じ構成のテーブルを結合する

    AとBという全く同じ列構成からなるテーブルの結合を考えています。 イメージとしては、Aのレコードが全て表示された下にBのレコードが列挙されるような感じです。 "INNER JOIN"、"LEFT OUTER JOIN"で行った結果、AとBでキーに同じ値を持つと、どちらかの値で上書きされてしまうみたいなのでイメージ通りにはいきませんでした。また、"CROSS JOIN"ではAの右側にBの内容が追加されてしまうのもあって、イメージ通りにできませんでした。 どなたかこのSQL文が分かる方はお教えいただけないでしょうか? よろしくお願いします。 データベース:SQL Server

  • MERGE文について

    以下のようなSQL文を作成し、Oracle10gで実行したところ、正常に実行されていたのですが、同一のSQL文をOracle9iで実行したところ、 ORA-00905: キーワードがありません。 とエラーがでてしまいました。 merge文はOracle9iから追加された?ものだったと記憶しているですが、思い違いでしょうか? それともOracle9i、Oracle10gで何か違いがあるのでしょうか? Oracleのバージョンはそれぞれ以下の通りです。 Oracle10g:10.1.0.2.0 Oracle9i:9.0.1.1.1 よろしくお願い致します。 <やりたいこと> A表のa列とb列が、B表のa列とb列と一致したものレコードのみ、B表のc列の内容にA表のc列をアップデートする。(インサートはしない) merge into 表A A using 表B B on (A.a = B.a and A.b = B.b) when matched then update set A.c = B.c /

  • select insertで複数テーブルから値を取得したい

    環境:oracle9i select insertで、2つのテーブルから値を取得して、1つのテーブルにinsertすることは可能でしょうか? たとえば、以下の場合、どのようなSQL文を書けばよいか、アドバイスいただけますでしょうか。 よろしくお願いします。 insertしたいテーブル:A Aテーブルの項目:o,p,q,r,s,t 値を取得するテーブル:B,C Bテーブルの項目:o,p,q,r Cテーブルの項目:o,p,s,t oとpが主キーになっていて、それらが一致するBとCのデータを あわせて、Aにinsertしたいと思っています。 insert into A(o,p,q,r,s,t) select このあと、どのように書けばよいのかがわかりません。

  • 外部キーが設定されているテーブルのupdateについて

    PostgreSQL8.24を利用しています。 pgADMINIIIでテーブルを作成しました。 【TABLE_A】と【TABLE_B】があります。 【TABLE_A】の【ID】が【TABLE_B】の【ID2】が外部キーとして設定してあります。 CONSTRAINT TABLE_B_fkey FOREIGN KEY (ID2) REFERENCES TABLE_A (ID) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION 上記のように記述されています。 SQL文のUPDATEを使い、IDが「01」を「05」に更新したいのですが、 以下のように記述するとエラーになります。 どのようなUPDATE文を記述すればよろしいのでしょうか。 UPDATE TABLE_A INNER JOIN TABLE_B on TABLE_A.ID=TABLE_B.ID2 SET TABLE_A.ID = '05',TABLE_B.ID2 = '05' WHERE TABLE_A.ID='01'" よろしくお願いいたします。

  • ACCESSで抽出したフィールドに同じレコードにある値を複製したい

    A、B、Cという列があって、Aの列の値が空欄(NULL)であるレコードを抽出し、そのレコードのAの列にBの値をコピー(複製)したいのですが・・・・  説明が下手ですみません。もしクリエで不可能な場合、SQLで記述可能でしょうか。その記述文も教えていただけると助かります。よろしくお願いします。

  • 片方のテーブルにないデータを取り出す

    お世話になります。 SQL文についてちょっと助けてください。 テーブルA Aキー(主) テーブルB Bキー(主) Aキー テーブルBからBキーを取り出すとき、AキーでテーブルAを見に行って存在しない場合のBキーだけを取り出したいのです。 一度のSQL発行で可能でしょうか。

  • Excel 同じ値の列を一行表示

    教えて下さい。 同じ列に複数の同じ値があり、その値を一つの行で表示する場合。 (グループ化でしょうか?グループ化を試しましたが、うまく纏まりません。グループ化の主キーの設定??) また、その中からの値を検索して別の表に取り出すには、どうしたらよいでしょうか? 例)       1 あ A zz  →  A  → A 1 あ 2 い B vv  →  B  → B 2 い 3 う C xx  →  C  → C 3 う 2 い B vv 3 う C xx 1 あ A zz (1)3列目の複数ある値を一つにまとめる。 (2)他のシートに纏めてある表(3列目の値が主キーなっている表)に  纏めた値に対する情報を追加入力したい。  *値を返すのは別のシートです。 うまく説明が出来ず分かりづらいと思いますが、よろしくお願いします。