通过从多个表中选择数据来插入一个表

时间:2015-03-02 13:06:09

标签: mysql sql stored-procedures sql-insert sql-psm

我需要从两个表中选择数据并插入一个表中。同样的问题被多次询问和回答,但我有一些要求。

我总共有三张桌子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。请建议我。

先谢谢。

1 个答案:

答案 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的单个值。