• ベストアンサー

insert into select で別テーブルのID分挿入したい

SQLでこんなことは可能でしょうか。 列 IDとTEXT をもつテーブルA と、 列 IDをもつテーブルBがあります。 テーブルAに、テーブルBのID分のデータを挿入したいです。 TEXTはテーブルAのID=1のTEXTデータを全ての列に挿入します。 このような場合のSQL文を調べてるのですが、 なかなかわからなくて困っています。 insert into select b.id,a.text from tableA as a, tableB as b でもうまくいきませんでした。 何かいい方法はないでしょうか? 回答お待ちしております。

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

  • ベストアンサー
回答No.5

#2、#5回答者です。 SQL Serverのバージョンは、何でしょうか? #2、#5で提示したSQL中の 「select ~ from(select ~ from ~)」 という記述は、標準SQLでも規定され、多くのRDBMSでもインラインビューといった機能名で実装されていますが、SQL Serverでは2005で実装されたらしいことが分かりました。 そのため、やってること(=質問者さんがやりたいことを推測したもの)の確認とSQL Server 2000でも実行可能なSQLを改めて提示します。 SQL Server 2005では、前回提示のSQLで、そのまま動くと思います。 1.提示された条件→こちらでの解釈 (1)表Aには、ID列とTEXT列がある。 (2)表Bには、ID列がある。 (3)表Aに表Bの全行を追加。この時、TEXT列には、表AのID=1の行のTEXT列の値を格納。 →表AのID=1で行を絞り込めるとのことから、列IDはユニークと推測しています。 2.やりたいことの推測 表A ID TEXT 1 a 2 b 3 c 表B ID 4 5 6 得たい結果(表A) ID TEXT 1 a 2 b 3 c 4 a 5 a 6 a 3.SQL例  ※列TEXTはTXTと変えています。 (1)SQL Server 2000でのSQL例 insert into A select B.ID,A.TXT from A,B where A.ID=1; (2)SQL Server 2005でのSQL例 (1)または、以下のような記述も可能 insert into A select id,txt from (select txt from A where id=1) as x,B

その他の回答 (4)

回答No.4

#2回答者です。 標準的なSQLの構文、意味を知らない人がいるようなので、解説します。 (1)表の列構成 列 IDとTEXT をもつテーブルA と、 列 IDをもつテーブルBがあります。 (2)格納方法 テーブルAに、テーブルBのID分のデータを挿入したいです。 ↓ insert into A select id,txt from ( ~ ) as x,B テーブルBのID分だから、Bと()内の検索結果(テーブルAをID=1で絞り込んだ1件)を直積しています。 TEXTはテーブルAのID=1のTEXTデータを全ての列に挿入します ↓ select txt from A where id=1 で取り出します。 これを組み立てると、以下のSQLになります。 insert into A select id,txt from (select txt from A where id=1) as x,B

noname#26224
noname#26224
回答No.3

・単純にTableAへ挿入 INSERT A SELECT id, text  FROM B WHERE id = 1 ・重複を除いて挿入 INSERT A SELECT DISTINCT id,text  FROM B WHERE id = 1 ・「ID=1のTEXTデータを全ての列に挿入」を踏まえて、「id=1のtext値をすべての行に更新」と解釈して UPDATE A  SET text = (SELECT b.text FROM b WHERE b.id = 1)

HAWAI777
質問者

お礼

ありがとうざいました。おかげで解決です。

回答No.2

文章だけでの説明では分かりにくいので、基の表と得たい結果を明示するといいですよ。 >insert into select b.id,a.text from tableA as a, tableB as b insertの構文自体間違っているし、質問内容と合っていませんが? >でもうまくいきませんでした。 具体的に、どううまく行かなかったのかを書きましょう。 文法エラーになるとか、期待した結果と違うといったことと、具体的な内容を書きましょう。 やりたいことを推測すると、以下のようなSQLでしょうかね? insert into A select id,txt from (select txt from A where id=1) as x,B

HAWAI777
質問者

お礼

次回から、ご指摘いただいたことに注意して質問したいと思います。 ありがとうございました。 解決いたしました。

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

補足をお願いします。 tableA ----------------- ID TEXT 1 a 2 b 3 c tableB ----------------- ID 1 2 3 tableB.ID をtableAのどこのフィールドに入れたいのですか? tableA.ID とtableB.IDに関連付けたいのか?tableA.TEXT とtableB.IDに関連付けたいのか?どっちですか?

HAWAI777
質問者

お礼

tableB.ID分だけtableA.IDに挿入したいということです。 その際に、tableA.TEXTに入れるのは、 tableA.IDが1のTEXTを入れるということをしたいです。

関連するQ&A