2009-11-18 30 views
4

我正在將字段遷移到新表中。新表格有三個字段。我試過的是將GROUP BY結果插入到另一個表中

INSERT INTO foo VALUES ('', (SELECT bar FROM baz GROUP BY bar), ''); 

這樣做會導致錯誤,因爲select導致了多行。

這樣做的正確方法是什麼?

回答

15

如果我理解正確的話,你想要的東西,如:

INSERT INTO foo (col1name, col2name, col3name) 
    SELECT '', bar, '' 
    FROM baz 
    GROUP BY bar 
4

你可以試試:

INSERT INTO foo 
SELECT '',bar,'' FROM baz GROUP BY bar 
4
INSERT INTO foo (fieldName1,fieldName2,fieldName3) 
    SELECT '',bar,'' FROM baz GROUP BY bar 
4

與邁克爾的回答去,另一種可能性是

INSERT INTO foo (col2name) SELECT bar FROM baz GROUP BY bar 

其中col1和col3是d被定義爲具有空字符串的缺省值。

6

或者,如果我正確地理解了你,並且你希望在舊錶格中爲每個不同的條形值添加一個條目,我認爲這會使得這一點更加清晰。

INSERT INTO foo (col2name) SELECT DISTINCT bar FROM baz 

執行計劃和性能應similiar

+0

+1成功的人工優化! – 2009-11-18 02:54:25

+0

整潔優雅的解決方案 – zeeshan 2016-03-22 14:02:53