テーブルAからselectした結果を元に複数件データをテーブルBにinsertする


以下のようなテーブルデータがそれぞれあるとします。

テーブルA

id | data | type  
---|---|---  
1 | aaa | a  
2 | bbb | a  
3 | ccc | a  
4 | ddd | b  
5 | eee | b  
  
テーブルB

id | data  
---|---  
1 | xxx  
2 | yyy  
  
* * *

テーブルAから、例えば以下のようにセレクトし、その結果をテーブルBにインサートして以下の結果のようにしたいです。

１回のSQL文で実現可能でしょうか？  
実現可能ならどのようにSQL文を書けばよいでしょうか？

[code]

    select data from A where type = 'a'
    
[/code]

テーブルB (インサート後)

id | data  
---|---  
1 | xxx  
2 | yyy  
3 | aaa  
4 | bbb  
5 | ccc




コメントで触れましたが、`id`列の採番を`INSERT`する側に委ねるのではなく、テーブルが（テーブル定義として）責任を持つべきです。具体的には大抵のSQLには`AUTO_INCREMENT`のような機能が用意されています。  
（payanecoさんに続く意味でMySQLで書きます。）

テーブルBの定義が

[code]

    create table B (id integer AUTO_INCREMENT, data varchar(10), INDEX (id));
    
[/code]

となっていれば、`INSERT`する側は`id`列に`NULL`を与えるだけで済みます。

[code]

    insert into B select NULL, data from A where type = 'a';
    
[/code]




コメントで触れましたが、`id`列の採番を`INSERT`する側に委ねるのではなく、テーブルが（テーブル定義として）責任を持つべきです。具体的には大抵のSQLには`AUTO_INCREMENT`のような機能が用意されています。  
（payanecoさんに続く意味でMySQLで書きます。）

テーブルBの定義が

[code]

    create table B (id integer AUTO_INCREMENT, data varchar(10), INDEX (id));
    
[/code]

となっていれば、`INSERT`する側は`id`列に`NULL`を与えるだけで済みます。

[code]

    insert into B select NULL, data from A where type = 'a';
    
[/code]

