- ベストアンサー
副問い合わせのinsert文
いつもお世話になっています。 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); とはできないみたいですので… どうかご教授宜しくお願いします。
- みんなの回答 (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; を使います。 クエリが外側の項目や変数を参照できることを利用しています。
その他の回答 (1)
- whiteline507
- ベストアンサー率63% (47/74)
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; となります。
お礼
返事ありがとうございます。 別パターンでの説明参考になりました。 試してみたいと思います。
お礼
わかりやすい説明ありがとうございます。 早速試してみたいと思います。