我需要从两个表中选择数据并插入一个表中。同样的问题被多次询问和回答,但我有一些要求。
我总共有三张桌子T1,T2,T3。 我的最终目标是将数据插入表T3。表T3中共有15列。在这15列中,我需要填充表T2中的14列数据和最后一列的数据,我需要连接表T1和T2,我需要获取该列的数据。请找到以下查询
CREATE procedure proc_name
BEGIN
Insert into T3(
id,
col1,
col2,
....
...
col14)
select
(select id from T1 INNER JOIN T2 ON
(T1.somecol1=T2.somecol1,
T1. somecol2= T2.somecol2,
T1.somecol3 = T2.somecol3,
T1.somecol4= T2.somecol4)
ORDER BY T2.somecol5 LIMIT 1),
T2.col1,
T2.col2,
...
...
T2.col14 from T2;
END;
此处,T3的十四列中的其余列具有关系第一列id。
每当我调用上面的存储过程时,T3中的所有记录都会在表T1中插入前1个id,即使我在T1中总共有10个id。 仔细观察后我才知道原因是因为我提到了限制1所以每次都只获取第一个id。
如果我没有提到限制1,它将返回所有10个id并且它自己的查询失败。
无论如何,我可以在表T3中获得所有id。请建议我。
先谢谢。
答案 0 :(得分:1)
要详细说明@jarlh(绝对正确)的评论,你需要在两个表之间建立连接,而不是在子查询中选择一个值
INSERT INTO T3
(id
,col1
,col2
,...
,col14)
SELECT T1.id
,T2.col1
,T2.col2
,...
FROM T1
INNER JOIN T2 ON
(T1.somecol1=T2.somecol1,
T1. somecol2= T2.somecol2,
T1.somecol3 = T2.somecol3,
T1.somecol4= T2.somecol4)
使用您的代码,您只能期望来自T1的单个值。