• ベストアンサー

他のテーブルを参照した結果をしようする

テーブルA(no) テーブルB(no, type) の二つのテーブルがあるとします。 テーブルAは空です。 テーブルBは、例として 1, A 2, B 3, A 4, B 5, B というデータが入っているとします。 テーブルBでtypeがAになっているnoを全てテーブルAにINSERTしたいです。 この場合、どう書けばいいですか?

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

  • ベストアンサー
  • chiwa-CF
  • ベストアンサー率51% (36/70)
回答No.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' こんな感じです。

vertig0
質問者

お礼

無事解決できました.ありがとうございました. また,説明不足で困らせてしまい,申し訳ありませんでした. 以後,気をつけさせていただきます.

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

型が違うのならそういってもらわないと・・・ そのAのnameってのはBにはないのですよね? またnameというからにはvarcharのnot null設定でしょうか? であれば空文字を明示的に指定してやればどうでしょう? INSERT INTO テーブルA SELECT `no`,'' FROM テーブルB WHERE `type`='A'

vertig0
質問者

お礼

無事解決できました.ありがとうございました. また,説明不足で困らせてしまい,申し訳ありませんでした. 以後,気をつけさせていただきます.

  • chiwa-CF
  • ベストアンサー率51% (36/70)
回答No.2

insert into A Select no from B where type='A' 試してないですが、これでいけそうな気がします。 いかがでしょうか? ちなみにMySQL 4.1以降で使用できそうです。

vertig0
質問者

補足

No.1の方と同様ですが、ダメでした。 実際はテーブAはnoだけではなく、(no, name)というテーブルです。 テーブルBも他にもいくつかカラムが存在します。 必要と思われる箇所だけ抜粋したのがいけなかったのでしょうか。 テーブルA(no, name) テーブルB(no, type, ...)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

INSERT INTO テーブルA SELECT `no` FROM テーブルB WHERE `type`='A' とか?

vertig0
質問者

補足

すみません、ダメでした。 原因はこちらにあります。 実際はテーブAはnoだけではなく、(no, name)というテーブルです。 テーブルBも他にもいくつかカラムが存在します。 必要と思われる箇所だけ抜粋したのがいけなかったのでしょうか。 テーブルA(no, name) テーブルB(no, type, ...)