2011-09-27 15 views
16

È possibile una query come questa? MySQL mi dà un errore di sintassi. valori inserire più con seleziona annidati ...INSERIMENTO MySQL con SELECT multipli nidificati

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

risposta

26

Ho appena verificato le seguenti (che funziona):

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

immagino che il problema che ho s che non hai() s intorno ai tuoi seleziona come questa query non funzionerebbe senza di essa.

+0

Questo era davvero il problema. Quanto può essere semplice ... – netiul

13

Quando si dispone di una sottoquery del genere, si deve restituire una colonna e una riga solo. Se le subquery restituiscono solo una riga, hai bisogno di una parentesi intorno a loro, come notato da @ Thor84no.

Se ritornano (o potrebbe tornare) più di fila, provate questo invece:

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

o se le condizioni sono molto diverse:

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

Grazie! Anche se il problema era davvero mancante parentesi, il tuo commento è stato educativo! – netiul