アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

でもうまくいきませんでした。

何かいい方法はないでしょうか?
回答お待ちしております。

A 回答 (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
    • good
    • 0

#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
    • good
    • 0

・単純に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)

    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/09 10:12

文章だけでの説明では分かりにくいので、基の表と得たい結果を明示するといいですよ。



>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
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/09 10:11

補足をお願いします。



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に関連付けたいのか?どっちですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/09 10:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!