2012-02-23 28 views
37

MySQL ¿Cómo INGRESAR EN una tabla con una subconsulta SELECT que devuelve varias filas?MySQL ¿Cómo se INSERTAR EN una tabla con una subconsulta SELECT que devuelve varias filas?

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

    (
     "Henry" 
    ), 
    ); 

I QUIERO para poblar la nueva tabla con todos los resultados que regresan de esta subconsulta. ¿Cómo puedo hacer esto sin conseguir un ERROR 1242 (21000): subconsulta devuelve más de 1 fila

+1

Puede usarlo con un procedimiento que utiliza un bucle para insertar todos los elementos. –

+0

Soy un newb de MySQL, ¿cómo iterar sobre un resultado? – stackoverflow

+0

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

Respuesta

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

Combinar la cadena estática Henry con su consulta SELECT.

+0

¿Qué pasa si tengo varios nombres? No solo 'Henry' y yo necesitamos'iterate_ sobre ellos. –

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

Eso funciona http://decoding.wordpress.com/2008/10/11/sql-server-insert-into-with-subquery/ – stackoverflow

+0

edité la publicación – 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

¡Bienvenido a Stack Overflow! En lugar de solo publicar un bloque de código, * explique * por qué este código resuelve el problema planteado. Sin una explicación, esta no es una respuesta. –

+1

Esto realmente no responde la pregunta. Fue "[...] _popular la nueva tabla con ** todos los resultados ** que regresan de esta sub consulta_", y esto limita los resultados de la subconsulta a una fila. (Sé que esta respuesta tiene más de 4 años, pero pensé que señalaría esto de todos modos). – MJV

5

Esto es lo que he encontrado que funciona bien. Es un poco largo, pero muchas veces se deben barajar datos adicionales.

Inserte varias filas en la tabla 1 de la tabla 2 con los valores. EJEMPLOS:

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

puede insertar con fuerza los valores codificados para obtener insertar varias filas con la repetición de datos:

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

Tenga en cuenta que: "Valor", "1900-01-01", "9999- 12-31 "se repetirá en todas las filas insertadas.

-1

inserte en ec_element (parentid, name) seleccione elementid, 'STARTUP' de ec_element donde name = 'BG';

instrucción de inserción toma los valores elementid de la tabla encontrada con la condición cumplida y una cadena de etiqueta.

Cuestiones relacionadas