2016-04-05 217 views
1

我試圖在表格中插入多行。幾乎所有這些行的值都與同一個表上的另一組記錄相匹配,所以我很好奇我是否可以使用多個SELECT語句編寫單個INSERT語句來插入多行。就像這樣:對多個SELECT語句使用INSERT INTO

INSERT INTO table (col1, col2, col3, col4) 

SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 0 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 1 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 2 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 3 

這可能嗎?最後,它應該插入4行,所有行都具有相同的NewRecordID,col4值爲0-3,其他col值取自同一個表上相應的OldRecordID。當我運行它時,它只運行第一個INSERT SELECT語句,然後將其他運行作爲它們自己的SELECT語句。我在連接這些東西時錯過了什麼?我總是可以多次運行它並每次更改值,但我想知道是否有辦法避免這種情況。我欣賞和幫助或有用的提示。

感謝

回答

0

你可以與聯盟,其加入他們到一個記錄連接:

INSERT INTO table (col1, col2, col3, col4) 

SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 0 
union 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 1 
union 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 2 
union 
SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 = 3 
+2

不,這並不一定會做同樣的事情 - 這將消除重複。建議'聯盟所有',除非你知道*你想重複消除。 –

+0

謝謝!這工作,我用AB建議使用UNION ALL語句。我最終選擇了裏卡多C的解決方案,但這也很棒。我很欣賞快速反應! – jlarson497

1
INSERT INTO table (col1, col2, col3, col4) 

SELECT (newRecordID, col2, col3, col4) 
FROM table WHERE col1 = oldRecordID AND col4 IN(0,1,2,3) 
+0

太棒了!這工作。我結束了使用UNION ALL解決方案,因爲我已經有了一堆SELECT語句。然後我刪除了新條目並嘗試了這種方式。可能會堅持這個解決方案,因爲它節省了一點點空間。謝謝! – jlarson497

+0

@ jlarson497很高興幫助。要麼你選擇了我的,要麼是亞倫博士的,只是不要忘記接受一個作爲答案;) –