• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:結合テーブルでINSERTする方法について)

結合テーブルでINSERTする方法について

freemankの回答

  • ベストアンサー
  • freemank
  • ベストアンサー率75% (3/4)
回答No.1

二つのテーブルを同時にインサートする事は 不可能な為、やはり2回のインサート文が必要ですね (1)Bのテーブルへのインサートを行いその時にLEFT JOINで  Bのテーブルを紐付け、IDがNULL の場合をインサートの  条件とすれば、1と2の作業が行えます。 (2)(1)同様にBのテーブルをJOINしインサートを行えば(1)の処理で データが存在する為、データは反映されると思います。

goroneko-begin
質問者

お礼

やはり2回インサートを行うという結果は残念ですが、大変参考になりました。ありがとうございます。

関連するQ&A

  • 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 このあと、どのように書けばよいのかがわかりません。

  • Insert Into Select での重複について

    DB:SQLServer2000 こんにちは お世話になっております。 トランザクションのテーブルA から ワークのテーブルBへInsert Into Select を使用してデータを格納しているのですが、その際に重複が発生してしまいます。 テーブルA 主キーあり テーブルB 主キーなし Delete B Insert into B select 項目1,項目2,・・・ from A With(Nolock) where 日付項目 = 20080101 テーブルAの主キー項目は全てテーブルBへInsertしており、Insert完了後のテーブルBの中身を見ると、まれに全く同じデータが2件出来ていることがあります。 このInsert into selectが実行されている間に、テーブルAに対して登録更新が行われることもあります。 色々と試してはいるのですが、原因が特定できずに困っております。 もし何かお気づきになられる方がいらっしゃいましたら、ご教示下さい。 よろしくお願い致します。

  • INSERTしたテーブルデータの参照

    いつもお世話になっています。 早速ですが質問したいことがあります。 環境は、ORACLE11gです。 よろしくお願いします。 PL/SQLにて、テーブルAに対してINSERTを行い、テーブルAにINSERTした データを元にデータを作成し、テーブルBにINSERTをしたいと考えています。 COMMITは、プログラムの処理が全て終わった後に行います。 一応プログラムを作成し、想定どおりの動作を確認できたのですが、一点だけ 気になることがあります。 テーブルAにデータをINSERTしてから、COMMITせずに、テーブルBのデータを 作成するために、テーブルAのデータを取得します。その際、最初に登録した テーブルAのデータは、テーブルBを作成する際、必ず取得できるのでしょうか。 (一応作成したプログラムでは取得できていますが、必ず取得できるものなのか  を教えていただきたいです。) COMMITは、仕様上プログラムが全て終わった後にしか行えません。 質問は以上です。 質問文がごちゃごちゃして見難くてすみませんが、ご回答よろしくお願いします。

  • 2つのテーブル結合

    Oracle10g使用しています。 テーブルAとテーブルBを結合させてデータを取得したいと思っています。 [テーブルA] ID name 1 A 2 B 3 C 4 D [テーブルB] ID SEQ VALUE 1 1 111 2 1 222 2 2 333 3 1 444 4 1 555 4 2 666 4 3 777 テーブルAのキーは[ID]、テーブルBのキーは[ID,SEQ]です。 この二つを連結して以下のように出力したいと思っています。 ID SEQ NAME VALUE 1 1 A 111 2 2 B 333 3 1 C 444 4 3 D 777 テーブルBのデータは同じIDのうち最大のSEQのものを取得したいのですが よいSQLが思いつきません。 よい方法があればご教授ください。 よろしくお願いいたします。

  • テーブル結合について

    テーブルの結合についてお聞きしたいことがあります。 カラム「KEY」を結合条件に テーブルA、B、Cを結合して【取りたい結果】のようなデータを取りたいと思っています。 しかし、テーブルAにBとCをLEFT JOINを結合した所、 【取得された結果】のデータが取得されました。 どのような結合をしたら期待通りの結果が得られるのでしょうか? 回答宜しくお願いします。 【取得された結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 B-1 C-2 A-1 B-1 C-3 2 A-2 3 A-3 【取りたい結果】 key dataA dataB dataC ------------------------------------------------- 1 A-1 B-1 C-1 A-1 C-2 A-1 C-3 2 A-2 3 A-3 【テーブルA】 key dataA --------------------- 1 A-1 2 A-2 3 A-3 【テーブルB】 key dataB --------------------- 1 B-1 【テーブルC】 key dataC --------------------- 1 C-1 1 C-2 1 C-3

  • テーブルの結合に付いて

    こんにちわ 2つのテーブルからデータを検索する方法に関してです。 テーブル AとB が有り、 お互いに、フィールド ExtID で関連付けがされているとします。 ここで、 SELECT A.NAME, B.ADDRESS FROM A INNER JOIN B ON A.ExtID = B.ExtID とする方法と SELECT A.NAME, B.ADDRESS FROM A,B WHERE A.ExtID = B.ExtID が有ります。 この2つに関して、違いとかメリット・デメリット有りましたら教えてください。 よろしくお願い致します。

  • SQL Server INSERTのトリガで採番

    データINSERT時にトリガを使い主キーを 採番したいのですが、少々コーディングに 困っていてます。 わかる方どうぞ、助言をお願いします。 主キー yyyymm+n(5) 採番したまではよかったのですが、 INSTEADテーブル(トリガのバッファテーブル?)の 主キーのフィールドに 格納する方法がわかりません。 どうもORACLEと記述方法がまるで違うので かなり苦戦しています。 テーブルが確定してるので現状の フィールドレイアウトやデータ体系を変更することは できません。よろしくお願いします。

  • 別テーブルからselectした値を他のテーブルにinsertしたいのですが、上手くできません

    以下のように行ったのですが、 全ての値が別テーブルにinsertされません。 $sql = "SELECT tbl_A.id, tbl_A.data FROM tbl_A "; $rst = mysql_query( $sql ); while ( $col = mysql_fetch_array( $rst ) ) { $sql = "INSERT INTO tbl_B (          date, id, data ) VALUES ( '" . date( 'Y-m-d' ) . "', '" . mysql_real_escape_string( $col['id'] ) . "', '" . mysql_real_escape_string( $col['data'] ) . "' )"; } このやり方では、テーブル内の1つの値しかinsertされません。 selectされた全ての値をinsertするにはどのようにしたら良いのでしょうか? よろしくお願いします。 DB:mysql5 SP:php5

    • ベストアンサー
    • MySQL
  • テーブル結合について、下記SQLをANSI結合の書き方で表したい。

    テーブル結合について、下記SQLをANSI結合の書き方で表したい。 select * from (select key from A union select key from B union select key from C) X, A,B,C where X.key=A.key(+) and X.key=B.key(+) and X.key=C.key(+) このSQLをANSI結合の記述で書きたいのですが、 (+)での結合文になれておらず試行錯誤しております。 下記のようなのかなとは模索しておりますが、 手元に実行環境がなくわかりません。 また、要所気付く点などありましたら、ご指摘願います。 select A.*, B.*, C.* from (select key from A union select key from B union select key from C) X, LEFT JOIN A ON X.key=A.key LEFT JOIN B ON X.key=B.key LEFT JOIN C ON X.key=C.key

  • 結合したテーブルに名前をつけるには?

    お世話になります。 【前提】 Aテーブル |key|hoge|int1|int2| (keyはユニーク) Bテーブル |key|hogehoge| (keyはユニーク) 上記のテーブルを、下記のSQLで結合。 SELECT `A`.`key`,(`A`.`int1` / `A`.`int2` ) as `kekka`, `B`.`hogehoge` From `A` left join `B` on `A`.`key` = `B`.`key` 【目的】 ユニークではない`A`.`hoge`の重複を省き、かつ、`kekka`が最大のものを選びたい。 【考え方】 `A`.`hoge`でグループ化し、max(`kekka`)を選ぶ。 【そのために】 SELECT `A`.`key`,(`A`.`int1` / `A`.`int2` ) as `kekka`, `B`.`hogehoge` From `A` left join `B` on `A`.`key` = `B`.`key` IN(SELECT max(`kekka`) FROM `●●` GROUP BY `A`.`hoge`) ★質問です。 1)根本的に足りてない知識は何でしょうか? 2)上記の考え方で間違っていませんか? 3)●●には何を入れればよいでしょうか? (`A`を指定してみましたが、Unknown column 'kekka' in 'field list'といわれてしまいました) MySQLのバージョンは5.1.57です。