• ベストアンサー

oracle8 マッチングして更新する方法

テーブルAのaが テーブルBのaと同じとき テーブルAのa,b,c,d,eを テーブルCのa,b,c,d,eに書き換える (全てのaは主キーです。各データは複数です) ということはひとつのSQLで可能ですか。 よろしくお願い致します。

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

  • ベストアンサー
  • takopon
  • ベストアンサー率69% (27/39)
回答No.1

update文では副問い合わせが使えますので、 update A set (a,b,c,d,e) = (select a,b,c,d,e from C where C.a = A.a) where A.a = (select a from B) というSQLが書けます。 さらに、aがキー項目なときは、 update (select * from A,B where A.a = B.a) set (A.a,A.b,A.c,A.d,A.e) = (select a,b,c,d,e from C where C.a = A.a) where A.a = (select a from B) てな具合にひとまとめに書くことが出来ます。 こんなんでよろしいでしょうかね。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • takopon
  • ベストアンサー率69% (27/39)
回答No.2

すいません、aがキー項目なときのSQLが間違ってることに書き込んだ直後に気が付きました。 正しくは update (select * from A,B where A.a = B.a) set (A.a,A.b,A.c,A.d,A.e) = (select a,b,c,d,e from C where C.a = A.a) だけでOKなはずです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Oracle10gのSQL文についての質問です。

    Oracle10gのSQL文についての質問です。 [A]テーブルに CODE(key) NAME と、フィールドがあります。 A NAME-A B NAME-B C NAME-C D NAME-D E NAME-E と、データが入っています。 [B]テーブルに CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 A 3 BIKO-A-3 B 1 B 2 B 3 C 1 C 2 BIKO-B-2 C 3 D 1 BIKO-D-1 D 2 BIKO-D-2 D 3 BIKO-D-3 E 1 E 2 E 3 BIKO-E-3 と、データが入っています。 結果が CODE(key) LINE(key) BIKO と、フィールドがあります。 A 1 BIKO-A-1 A 2 BIKO-A-1 A 3 BIKO-A-1 B 1 (null) B 2 (null) B 3 (null) C 1 BIKO-B-2 C 2 BIKO-B-2 C 3 BIKO-B-2 D 1 BIKO-D-1 D 2 BIKO-D-1 D 3 BIKO-D-1 E 1 BIKO-E-3 E 2 BIKO-E-3 E 3 BIKO-E-3 と、したいのです。 つまり、[B]テーブルのLINEが一番小さいBIKOが欲しいのです。 色々と考えてみましたが、解りません。 宜しくお願い致します。

  • ある条件でのSQLの取得方法について

    以下の条件でのSQLのデータの取得方法が分かりません。 2つのテーブルがあるとします。 ・テーブルA キー   項目1 10     X 20     Y ・テーブルB キー  項目2  項目3 10     5    C 10     6    D 12     6    E ここで取得する条件として ■テーブルAにあるのは、必ず取得します。 ■テーブルAのキーとテーブルBのキーは繋がり、繋がったテーブルBの情報は  別レコードとして取得します。 ■テーブルAのキー1つに対して、テーブルBのキーは無いかも知れないし、  複数件あるかも知れません。  無い場合はテーブルAの情報のみを出力し、複数件ある場合はその全てを出力します。 ■テーブルBの項目2が同じ値のデータがある場合、テーブルBを出力したレコードと  同じレコードに、項目2が同じデータの情報を出力します。  項目2が同じデータが無い場合はこの情報は出力しません。  項目2が同じ値のデータは最大2件しかありません。 上記の例の場合に出力したい結果 ・出力テーブルC キー  フラグ   項目1  項目2  項目3   項目2が同じキー  項目2が同じ値 10  テーブルA   X 10  テーブルB         5    C 10  テーブルB         6    D        12            E 20  テーブルA   Y (テーブルC のフラグとは、テーブルAの情報かテーブルBの情報かを示します) これを出来ればSQL、出来なければPL/SQLで取得したいのですが どちらの場合でも取得の方法に悩んでいます。 どのような方法で取得できるのでしょうか?

  • 【Oracle】Countの方法

    現在、Oracle8.1.7で開発をしております。 データの件数を数えたいのですが、やりたいことが複雑なので、うまくいきません。 以下のようなテーブルがあったとします。 テーブルA 商品名 ID 検査  A   1  ○  A   2  △  A   3  ×  B   4  -  B   1  ○  B   2  ○  B   3  △  C   1  ○  D   1  △ 商品名と、IDがキーとなっています。 商品名に対して、IDは複数存在しますが、 いくつあるかはわかりません。 このとき、1つでも『×』が存在したら、 その商品名は『×』として数えたいのです。 優先順位としては、  ×>△>○>- です。 ちなみに、上記のような場合には、 ×:1商品(A) △:2商品(B・D) ○:1商品(C) としたいのです。 データの件数が多いので、何かよい方法があったら 教えて下さいm(_ _)m

  • ALTER TABLE文の書き方について

    お世話になります。 今、以下のような列からなるテーブルがあります。 ・A(主キー) ・B(主キー) ・C(主キー) ・D(主キー) ・E(NOT NULL) ・F 列A、B、C、Dが複数列の組み合わせで主キーです。 このテーブルを以下のように変更したい場合、 どのようなALTER TABLE文を書けばできますでしょうか。 ※列A、B、C、Dの主キーはやめて、列A、B、C、D、G、H、Iの  複数列によるUNIQUE制約を設定。 ・A(UNIQUE&NOT NULL)← 主キーはやめる ・B(UNIQUE&NOT NULL)← 主キーはやめる ・C(UNIQUE&NOT NULL)← 主キーはやめる ・D(UNIQUE&NOT NULL)← 主キーはやめる ・E(NOT NULL) ・F ・G(UNIQUE)← 追加 ・H(UNIQUE)← 追加 ・I(UNIQUE)← 追加 やりたいことは、列G、H、Iを追加して、 A、B、C、D、G、H、IでUNIQUEにしたく、かつ、 追加したG、H、IはNULLを許容したいということです。 A、B、C、D、G、H、Iの複数列の組み合わせで主キーも 考えましたが、主キーにするとNULLが許容できないと いうことで、上記のようなレイアウトを考えました。 他に上手い方法があればご教授いただけると幸いです。 ちなみに列のデータ型はすべて可変長の文字列です。

  • テーブルのマッチングについて

    ORACLE10gを使用しています。 AとB同じレイアウト(キーも同じ)のテーブルがあります。 この2つのテーブルを比較して、 (1)Aテーブルのみにあるもの:1レコードCテーブルに追加 (2)Bテーブルのみにあるもの:1レコードCテーブルに追加 (3)A、B両方にあるもの:2レコードCテーブルに追加 上記に該当するレコードをCテーブルにINSERTしたいです。 実は、Cテーブルに項目が1つ追加されまして「区分」を書く必要があります。 どのパターン((1)か(2)か(3))でINSERTしたデータかです。 (1):1、(2):2、(3):3をセットする どのようにSQLを作成すると実現できるのでしょうか? ご指導よろしくおねがいします。

  • ORACLE10gのSQL文について

    SQL分についての質問です。(ORACLE10g) データが CODE(KEY) CODE2(KEY) LINE(KEY) MONEY A B 1 100 A C 2 200 A B 3 300 と、します。 結果が A B 100 400 A B 300 400 A C 200 200 と、したいのです。つまり、MONEYとMONEYの合計が ほしいのです。 色々と頑張ったのですが、解りません。 宜しくお願い致します。

  • 片方のテーブルに無いデータを削除したい

    過去ログを探っていろいろ試したのですが、うまくいかないので 教えてください。 TABLE1 に存在しない TABLE2 のデータをDELETEしたいのですが TABLE2 の対象年月(item2の内容)が、指定年月以上の条件で DELETEしたいのです。 ●指定月=2008/02 の場合 <TABLE1> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 <TABLE2> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 d   d   d   え   2008/01 (削除しない) e   e   e   お   2008/03 (削除対象) <DELETE結果 TABLE2> key1 key1 key1 item1  item2 a   a   a   あ   2007/12 b   b   b   い   2007/12 c   c   c   う   2007/12 d   d   d   え   2008/01 よろしくお願いします。 (環境:SQL Server2005 Standard)

  • SQL文で

    すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします

  • Oracle10gのSQL分について

    Oracle10gのSQL分についての質問です。 [A]テーブルがあります。 フィールドは、 [CODE](key) [DATE1] [DATE2] [DATE3] と、あります。内容は、 A 2006/07/01 2006/07/04 2006/07/07 B 2006/07/03 2006/07/08 2006/07/05 C 2006/07/02 2006/07/06 2006/07/09 と、あります。 結果を A 2006/07/01 C 2006/07/02 B 2006/07/03 A 2006/07/04 B 2006/07/05 C 2006/07/06 A 2006/07/07 B 2006/07/08 C 2006/07/09 と、したいのです。つまり、3つのフィールドの日付順にしたいのです。 出来るのでしょうか? 宜しくお願い致します。

  • こんなSQLを教えてください

    こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1|  a| | 2|  b| | 3|  c| テーブル2 |キー|コード| | 2|  B| | 4|  D| <更新後> テーブル1 |キー|コード| | 1|  a| | 2|  B| | 3|  c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください

このQ&Aのポイント
  • 私はバツイチで、付き合って半年の彼女もバツイチです。彼女の子供と元旦那さんが一緒にいることには問題ありませんが、彼らの関係は私にとってストレスです。
  • 元旦那さんと彼女は同業の自営業をしており、仕事として彼女が住んでいる家に行き来しています。また、彼女は元旦那さんのご両親にも子供を会わせるために連れて行っています。
  • 私は彼女と話し合いをしましたが、彼女は元旦那さんのことを仕事と割り切っており、問題がないと言っています。しかし、私にとっては理解できないことが多く、悩んでいます。どのように折り合いをつければ良いかアドバイスをお願いします。
回答を見る