2012-02-23 59 views
37

MySQL Làm thế nào để bạn INSERT INTO một bảng với truy vấn con SELECT trả về nhiều hàng?MySQL Làm thế nào để bạn INSERT INTO một bảng với truy vấn con SELECT trả về nhiều hàng?

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

    (
     "Henry" 
    ), 
    ); 

tôi MUỐN để cư bảng mới với tất cả các kết quả trả về từ subquery này. Làm thế nào để làm điều này mà không nhận được một ERROR 1242 (21000): Subquery trả hơn 1 hàng

+1

Bạn có thể sử dụng nó bằng quy trình sử dụng vòng lặp cho tất cả các mục được chèn vào. –

+0

Tôi là một newb MySQL, làm cách nào để bạn lặp lại kết quả? – stackoverflow

+0

http://dev.mysql.com/doc/refman/5.1/en/insert-select.html – Michas

Trả lời

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

Kết hợp chuỗi tĩnh Henry với truy vấn SELECT của bạn.

+0

Nếu tôi có nhiều tên thì sao? Không chỉ 'Henry' và tôi cần _iterate_ trên chúng. –

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

Công việc doest đó http://decoding.wordpress.com/2008/10/11/sql-server-insert-into-with-subquery/ – stackoverflow

+0

Tôi đã chỉnh sửa bài đăng – triclosan

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

Chào mừng bạn đến với Stack Overflow! Thay vì chỉ đăng một khối mã, vui lòng * giải thích * tại sao mã này giải quyết vấn đề được đặt ra. Nếu không có một lời giải thích, đây không phải là một câu trả lời. –

+1

Điều này không thực sự trả lời câu hỏi. Đó là "[...] _populate bảng mới với ** tất cả kết quả ** trả lại từ truy vấn con này" và điều này giới hạn kết quả truy vấn phụ thành một hàng. (Tôi biết câu trả lời này là hơn 4 tuổi nhưng tôi đã chỉ ra điều này.) – MJV

5

Đây là những gì tôi thấy rằng hoạt động tốt. Đó là một chút dài nhưng nhiều lần dữ liệu cần phải được xáo trộn xung quanh.

Chèn nhiều hàng vào bảng 1 từ bảng 2 với các giá trị. VÍ DỤ:

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); 

Bạn có thể chèn cứng mã hóa các giá trị để có được chèn nhiều hàng với dữ liệu lặp lại:

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); 

Lưu ý rằng: "Giá trị", "1900-01-01", "9999- 12-31 "sẽ lặp lại trên tất cả các hàng được chèn vào.

-1

chèn vào ec_element (tên cha mẹ, tên) chọn elementid, 'STARTUP' từ ec_element nơi name = 'BG';

câu lệnh chèn lấy giá trị elementid từ bảng được tìm thấy với điều kiện được đáp ứng và một chuỗi nhãn.

Các vấn đề liên quan