2015-03-02 72 views
-1

我需要从两个表中选择数据并插入到一个表中。同样的问题被问及多次回答,但我有这样的要求。通过从多个表中选择数据插入到一个表中

我总共有三个表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有关系。

每当我调用上述存储过程时,即使我在T1中共有10个id,在T3中的所有记录都会在表T1中插入top 1 id。 经过密切观察,我才知道原因是因为我提到了限制1,所以每次只能获取第一个id。

如果我没有提到限制1,它将返回所有10个id,并且它自己的查询失败。

无论如何我可以得到表T3中的所有ID。请建议我。

在此先感谢。

+0

子查询只允许在这里返回1行。你需要一个返回所有列的连接来插入。 – jarlh 2015-03-02 13:08:36

+0

http://stackoverflow.com/questions/17122128/insert-all-rows-from-table-int-other-table-single-query – Jannik 2015-03-02 13:10:14

+0

hi @jarlh,感谢您的快速回复。请你详细说明一下/详细解释一下。在提供的链接中,数据是从单个表中进行选择的,但这里需要从多个表中选择数据。 – Ram 2015-03-02 13:11:45

回答

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

相关问题