- ベストアンサー
他のテーブルを参照した結果をしようする
テーブルA(no) テーブルB(no, type) の二つのテーブルがあるとします。 テーブルAは空です。 テーブルBは、例として 1, A 2, B 3, A 4, B 5, B というデータが入っているとします。 テーブルBでtypeがAになっているnoを全てテーブルAにINSERTしたいです。 この場合、どう書けばいいですか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
私とNo.1様が回答したものは、テーブルAにnoというカラムしかないものを前提に作ったものでした。 他にもカラムがあって、noにだけ入れたいのであれば(他のカラムにNOT NULL制約がないなら)、以下のとおりでOKだと思います。 insert into A(no) Select no from B where type='A' 制約があるなら、No.3で書かれているとおりでよいかと。 また、nameの情報がテーブルBにあり、カラム名がnameなら、 insert into A(no,name) Select no,name from B where type='A' こんな感じです。
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
型が違うのならそういってもらわないと・・・ そのAのnameってのはBにはないのですよね? またnameというからにはvarcharのnot null設定でしょうか? であれば空文字を明示的に指定してやればどうでしょう? INSERT INTO テーブルA SELECT `no`,'' FROM テーブルB WHERE `type`='A'
お礼
無事解決できました.ありがとうございました. また,説明不足で困らせてしまい,申し訳ありませんでした. 以後,気をつけさせていただきます.
- chiwa-CF
- ベストアンサー率51% (36/70)
insert into A Select no from B where type='A' 試してないですが、これでいけそうな気がします。 いかがでしょうか? ちなみにMySQL 4.1以降で使用できそうです。
補足
No.1の方と同様ですが、ダメでした。 実際はテーブAはnoだけではなく、(no, name)というテーブルです。 テーブルBも他にもいくつかカラムが存在します。 必要と思われる箇所だけ抜粋したのがいけなかったのでしょうか。 テーブルA(no, name) テーブルB(no, type, ...)
- yambejp
- ベストアンサー率51% (3827/7415)
INSERT INTO テーブルA SELECT `no` FROM テーブルB WHERE `type`='A' とか?
補足
すみません、ダメでした。 原因はこちらにあります。 実際はテーブAはnoだけではなく、(no, name)というテーブルです。 テーブルBも他にもいくつかカラムが存在します。 必要と思われる箇所だけ抜粋したのがいけなかったのでしょうか。 テーブルA(no, name) テーブルB(no, type, ...)
お礼
無事解決できました.ありがとうございました. また,説明不足で困らせてしまい,申し訳ありませんでした. 以後,気をつけさせていただきます.