2012-02-23 68 views
37

MySQL如何用SELECT子查詢INSERT INTO表返回多行?MySQL如何將SELECT子查詢插入到表中返回多行?

INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    VALUES 
    (
    (
     SELECT d.id 
     FROM Names f 
     JOIN People d ON d.id = f.id 
    ), 

    (
     "Henry" 
    ), 
    ); 

WANT來填充新表與此子查詢返回的所有結果。如何做到這一點沒有得到一個ERROR 1242(21000):子查詢返回多個1行

+1

您可以通過使用循環的過程爲所有要插入的項目使用它。 – 2012-02-23 22:39:46

+0

我是一個MySQL的新手,你如何迭代結果? – stackoverflow 2012-02-23 22:40:58

+0

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html – Michas 2012-02-23 22:41:12

回答

88
INSERT INTO Results (People, names) 
    SELECT d.id, 'Henry' 
    FROM Names f 
    JOIN People d ON d.id = f.id 

合併靜態字符串HenrySELECT查詢。

+0

如果我有多個名字?不僅亨利和我需要對他們進行研究。 – 2017-09-21 07:08:58

6
INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    SELECT d.id, 'Henry' 
    FROM Names f 
    JOIN People d ON d.id = f.id 
+0

這樣做的工作http://decoding.wordpress.com/2008/10/11/sql-server-insert-into-with-subquery/ – stackoverflow 2012-02-24 16:20:12

+0

我已編輯文章 – triclosan 2012-02-24 16:25:39

8
INSERT INTO Results 
    (
    People, 
    names, 
    ) 
    VALUES 
    (
    (
     SELECT d.id 
     FROM Names f 
     JOIN People d ON (d.id = f.id) limit 1 
    ), 

    (
     "Henry" 
    ), 
    ); 
+8

歡迎來到Stack Overflow!請不要只發布一段代碼,請*解釋*爲什麼這段代碼能解決問題。沒有解釋,這不是一個答案。 – 2012-11-08 12:27:55

+1

這並沒有真正回答這個問題。它是「[...]用**從這個子查詢返回所有結果**填充新表」,這將子查詢結果限制爲一行。 (我知道這個答案已經超過4年了,但我想我會指出這一點。) – MJV 2016-10-18 06:59:53

5

以下是我發現的效果很好。它有點長,但多數額外的數據需要改變。

使用值從table2向table1插入多行。 實例:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT col1,col2,col3,col4,col5 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional); 

可以插入硬編碼值來獲得插入帶有重複數據多行:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT "Value", col2, col3, "1900-01-01","9999-12-31" 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional); 

需要注意的是: 「值」, 「1900-01-01」,「9999- 12-31「將在插入的所有行上重複。

-1

insert into ec_element(parentid,name)select elementid,'ec_element'STARTUP'where name ='BG';

插入語句從滿足條件的表中取值爲elementid,並使用標籤字符串。

相關問題