dポイントプレゼントキャンペーン実施中!

いつもお世話になっています。
insert文の副問い合わせのことでお聞きしたいのですが、
■通常のinsert文
insert into AAA values(aaa,bbb,ccc);

上記のsqlを副問い合わせにした場合(aaaに別テーブルからの検索結果を入れたい場合)どういうSQL文になるでしょうか。
参考書等を参照すると、副問い合わせの場合はvaluesを省略する(使えない?)と記述がありました。
insert into AAA values
( aaa IN (SELECT bbb from BBB where ccc = ddd),bbb,ccc);
とはできないみたいですので…
どうかご教授宜しくお願いします。

A 回答 (2件)

>insert into AAA values


>( aaa IN (SELECT bbb from BBB where ccc = ddd),bbb,ccc);

構文が不明瞭になるので、bbbがTABLE(BBB)に存在するものか、そうでない方を指しているのか区別するため、
基にするSQLを変更して、比較します。

insert into AAA values
( aaa IN (SELECT xxx from BBB where ccc = ddd),bbb,ccc);

という意味のSQLを書きたいのなら、

insert into AAA values ((SELECT xxx from BBB where ccc = ddd),bbb,ccc);
なら書けたような気がします。(但し、クエリでの該当レコードは1件であることが条件)

いつも私は、クエリが複数件でも支障のない、
insert into AAA SELECT xxx,bbb,ccc from BBB where ccc = ddd;
を使います。
クエリが外側の項目や変数を参照できることを利用しています。
    • good
    • 0
この回答へのお礼

わかりやすい説明ありがとうございます。
早速試してみたいと思います。

お礼日時:2007/01/30 00:18

No1さんの最後に書いてあるのが一般的な例ですね。


Aテーブルに入っているデータを空のBテーブル(表定義は
Aテーブルと同じ)にコピーしたいのであれば単純に
insert into B select * from A;
となります。

select以降は通常のselect文ですので
A表に入っているデータの内、col1が100以上のものだけ
B表にコピーしたいのであれば
insert into B select * from A where A.col1 >= 100;
となります。


空のB表が無く、A表を元に作成するところからはじめる場合は
create table B as select * from A;
となります。
    • good
    • 0
この回答へのお礼

返事ありがとうございます。
別パターンでの説明参考になりました。
試してみたいと思います。

お礼日時:2007/01/30 00:19

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