我有一个全新的表,我试图将数据复制到2个不同的表中。所有数据都是必需的,因此必须位于同一插入语句中。数据之一只是查找表中的外键。这两个原始表彼此无关,因为其中一个是链接到该新表的全新表。
我在将插入内容插入…select语句时遇到问题,可能需要一些帮助。我提出的以下查询在语法上是正确的,但出现错误。
insert into destination_table (fk_name_id, name, description, cycle_time, hand_offs, touch_time, fk_origin_id)
values ((select id from lookup_table where name = 'some name'),
(select ot.name, ot.description, ot.ctroi, ot.horoi, ot.ttroi, tc.id
from origin_table ot
left join table_a ta on ot.taid = ta.id
left join table b tb on ta.tbid = tb.id
left join table_c tc on tb.tcid = tc.id));
我得到的错误是:
ERROR 1241 (21000): Operand should contain 1 column(s)
我已经研究了几天,一直在寻找Stack Overflow和各种搜索引擎,但是没有看到这个特定的问题。
我能想到的唯一解决方法是单独进行查找表搜索,我无法获得WITH子句来处理插入,然后将其硬编码到插入中。但是,我真的不想这样做,因为它最终将在不同的环境中运行,并且首选动态方式。
答案 0 :(得分:1)
使用INSERT INTO...VALUES
代替INSERT INTO...SELECT
:
insert into destination_table (fk_name_id, name, description, cycle_time, hand_offs, touch_time, fk_origin_id)
select
(select id from lookup_table where name = 'some name'),
ot.name, ot.description, ot.ctroi, ot.horoi, ot.ttroi, tc.id
from origin_table ot
left join table_a ta on ot.taid = ta.id
left join table b tb on ta.tbid = tb.id
left join table_c tc on tb.tcid = tc.id;
答案 1 :(得分:0)
您可以使用交叉联接
insert into destination_table (
fk_name_id
, name
, description
, cycle_time
, hand_offs
, touch_time
, fk_origin_id)
values (
select t2.id, t1.* from
(select ot.name, ot.description, ot.ctroi, ot.horoi, ot.ttroi, tc.id
from origin_table ot
left join table_a ta on ot.taid = ta.id
left join table b tb on ta.tbid = tb.id
left join table_c tc on tb.tcid = tc.id) t1
cross join ( select id
from lookup_table
where name = 'some name') t2
);