2011-09-27 20 views
16

¿Es posible una consulta como esta? MySQL me da un error de sintaxis. insert-valores múltiples con anidados selecciona ...MySQL INSERT con múltiples SELECT anidados

INSERT INTO pv_indices_fields (index_id, veld_id) 
VALUES 
('1', SELECT id FROM pv_fields WHERE col1='76' AND col2='val1'), 
('1', SELECT id FROM pv_fields WHERE col1='76' AND col2='val2') 

Respuesta

26

Acabo de prueba los siguientes grupos (que trabaja):

insert into test (id1, id2) values (1, (select max(id) from test2)), (2, (select max(id) from test2));

me imagino que el problema que s que no tiene() s alrededor de sus selecciones ya que esta consulta no funcionaría sin ella.

+0

Eso de hecho fue el problema. Qué simple puede ser ... – netiul

13

Cuando se tiene una subconsulta así, hay que devolver una columna y una fila única. Si sus subconsultas solo devuelven una fila, entonces necesita paréntesis a su alrededor, como notó @ Thor84no.

Si regresan (o podría volver) más de fila, probar este lugar:

INSERT INTO pv_indices_fields (index_id, veld_id) 
    SELECT '1', id 
    FROM pv_fields 
    WHERE col1='76' 
    AND col2 IN ('val1', 'val2') 

o si sus condiciones son muy diferentes:

INSERT INTO pv_indices_fields (index_id, veld_id) 
    (SELECT '1', id FROM pv_fields WHERE col1='76' AND col2='val1') 
    UNION ALL 
    (SELECT '1', id FROM pv_fields WHERE col1='76' AND col2='val2') 
+2

Gracias! Aunque el problema en realidad era que faltaba paréntesis, ¡tu comentario fue educativo! – netiul

Cuestiones relacionadas