2015-03-02 74 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的單個值。

相關問題