在插入期间从其他表中选择数据?

时间:2012-11-12 21:49:26

标签: mysql sql database

我将数据插入到如下所示的数据库中: (1, 'blue'), (2,'large'), (3, 'round')

那里的数字对应于另一个表中的ID。看起来像是:id | value

插入此数据时,我想插入数字对应的实际值,而不是id。

有没有查询要这样做?或者在将值发送到数据库之前是否需要匹配值?

虽然我知道它不起作用,但我希望有类似的东西:
insert into table2 (table1.value[id=1], 'blue'), (table1.value[id=2],'large'), (table1.value[id=3], 'round') join table1

我想我可以使用:

insert into table2 
    ((select value from table1 where id=1), 'blue'), 
    ((select value from table1 where id=2),'large'), 
    ((select value from table1 where id=3), 'round')

但是,有40个不同的属性会产生41个查询!

2 个答案:

答案 0 :(得分:2)

首先虚拟地组成一个包含要插入的值(id,value)的表,然后将派生表连接到table1并将结果插入到table2中。

insert into table2
     select t.value, madeup.other
       from (select 1 id, 'blue' other union all
             select 2, 'large' union all
             select 3, 'round') madeup
       join table1 t on t.id = madeup.id;

答案 1 :(得分:0)

您可以使用临时表将id映射到值。我真的不会说MySQL,但是这样的话:

create table #mapping (id int, description varchar)
insert into #mapping values (1, 'blue')
insert into #mapping values (2, 'large')
insert into #mapping values (3, 'round')

insert into table2 
select table1.value, #mapping.description
from #mapping
join table1 on table1.id = #mapping.id

drop table #mapping