• ベストアンサー

【SQL文】このような結合UNION?できますか?

SQL文でテーブルを結合し、insertしたいと思っています。 例) テーブル名:tb1, カラム:A1,A2 テーブル名:tb2, カラム:B1(b1,b2,b3,,,,) テーブル名:tb3, カラム:C1(c1,c2,,,,,,) tb2とtb3を結合させてtb1へinsertしたいと思いますが、 tb2とtb3リレーションを組める要素がありませんし、データの型も違います。 |A1 | A2 __|____|_____ 1 |b1 |c1 _____________ 2 |b1 |c2 _____________ 3 |b2 |c1 _____________ 4 |b2 |c2 _____________ 上記のような結果を作ってtb1へINSERTしたいのですが、UNION結合を使えるのか どうかすらわかりません。ネットで調べたのですが、突破孔を見つけることができ ませんでした。 ちなみにACCESSで結合までの結果を得るのに、SELECT B1.tb2,C1.tb3 from tb2,tb3 という文で出せましたが,mySQLではダメでした。 どなたかご教授おねがいできますでしょうか?

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

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (770/5733)
回答No.3

正しいSQL文かどうかわかりませんが、 INSERT INTO tb1 ( SELECT B1,C1 FROM tb2,tb3 ) これで以下のような結果がでました。 MySQLのバージョンは5です。 tb1の内容 カラム A1 A2 データ b1 c1 b1 c2 b2 c1 b2 c2 b3 c1 b3 c2 このような結果でよろしいのでしょうか。 tb2のB1には(b1,b2,b3) tb3のC1には(c1,c2) これだけしかデータがない状態でのテストです。 ハングアップしているそうですが、データ量が多すぎて時間がかかっていると言う事ではないのでしょうか。 tb2の3件×tb3の2件=tb1に6件 これでもハングアップするのでしょうか。 ご質問文には(b1,b2,b3,,,,,,,,)とあるので、実際にあるかなりの量のデータでされているのかと思って聞いてみました。 Accessでもそうだと思いますが、UNIONの出番はなさそうです。

momonova
質問者

お礼

感謝感謝です!!ありがとうございました。 お礼の場所を間違えてしまいました。^^;

momonova
質問者

補足

ご回答ありがとうございます。 また、わかりにくい自分の説明で、すいません。 回答を見てすぐに、自分の思い込みに気付きました! 実行してみると思った結果を得ることができました。 感謝感謝です!!ありがとうございました。(^^)

その他の回答 (2)

回答No.2

基データと得たい結果を、中途半端な状態で提示していないでしょうか? どういうルールで得たいか、あるいは得たくないかの説明がまったくないので、他人には適切なアドバイスのしようがありません。 >テーブル名:tb2, カラム:B1(b1,b2,b3,,,,) >テーブル名:tb3, カラム:C1(c1,c2,,,,,,) 得たい結果だけ見ると、tb2とtb3の直積のように見えなくもないですが、提示されているb3が得たい結果から外れる理由が分かりません。 >tb2とtb3リレーションを組める要素がありません くっつけるのだから、何らかのルールがあるはずです。例えばtb2がm行、tb3がn行あるなら、直積ではm×n行が得られます。 >UNION結合を使えるのかどうかすらわかりません どこから「unionだ」と思ったのでしょうか? また、通番のようなものを付与したいなら、どういうルールで付与するか提示されないとアドバイスできません。 >ちなみにACCESSで結合までの結果を得るのに、 >SELECT B1.tb2,C1.tb3 from tb2,tb3 ACCESSも列名を表名で修飾する場合は、「表名.列名」だと思いますが? 実際のデータでなくここでの質問用に書き換えるのに、目茶苦茶になっていませんか? 少なくとも、次のような項目を提示してください。 (1)表の列構成とデータ型 (2)どの列で行を一意に識別できるか (3)母体データ・・・得たいデータだけでなく、得たくないデータも含める (4)得たい結果 (5)自分なりに考えたSQLや(4)を導き出すためのルール (6)RDBMS名、バージョン

momonova
質問者

お礼

ご回答ありがとうございました。 また、下手な説明で、お時間をとらせすいませんでした。 結果dell_OKさんの回答にて解決できました。 次回からはchukenkenkouさんご指摘のように (1)表の列構成とデータ型 (2)どの列で行を一意に識別できるか (3)母体データ・・・得たいデータだけでなく、得たくないデータも含める (4)得たい結果 (5)自分なりに考えたSQLや(4)を導き出すためのルール (6)RDBMS名、バージョン をしっかり明示して回答を仰ぎたいと存じます。 今回のご意見とても参考になりました。今後に生かしたいと思います。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>tb2とtb3リレーションを組める要素がありません という時点でSQLの仕事だとは思えませんが・・・ ORDER BY などでソート順番は保証されているのでしょうか? であればまだなにかやりようがありそうですが?

momonova
質問者

補足

回答ありがとうございます。UNIONでしたら、データの型、カラムが 同じなら結合できるのは言うまでもないのですが、縦に相互に データを組み合わせる必要がどうしてもあって、手作業で行うと怖いくらいです。リレーションが組める要素がないと私は思っているだけで 他にやり方があるのかもしれません。 テーブル名:tb1, カラム:A1,A2 テーブル名:tb2, カラム:B1(b1,b2,b3,,,,) テーブル名:tb3, カラム:C1(c1,c2,,,,,,) 少し変形して  A1    A2 ______ b1.B1  c1.C1 b1.B1   c2.C1 b1.B1  c3.C1 ------------- というふうにならべる SQLはできるでしょうか? SQLでは無理でしょうか? 前述のACCESSではできるのですが、SQL行うとハングアップしてしまいます。

関連するQ&A