1

我将数据插入到如下所示的数据库中: (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 个查询!

4

2 回答 2

2

首先使用要插入的值(id,值)虚拟组成一个表,然后将派生表连接到 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;
于 2012-11-12T21:54:37.783 回答
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
于 2012-11-12T21:54:52.837 回答