2011-09-27 15 views
16

Czy takie zapytanie jest możliwe? MySQL daje mi błąd składni. Wiele wstawiania wartości z zagnieżdżonych wybiera ...MySQL INSERT z wieloma zagnieżdżonymi SELULAMINami

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

Odpowiedz

26

Właśnie przetestowane następujące (który działa):

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

Wyobrażam problem s, że nie masz() s wokół wybranych, ponieważ to zapytanie nie zadziałałoby bez niego.

+0

To rzeczywiście był problem. Jak proste może być ... – netiul

13

Kiedy masz podkwerenda takiego, to musi powrócić jedną kolumnę i jeden wiersz tylko. Jeśli twoje podkwerendy zwracają tylko jeden wiersz, potrzebujesz nawiasów wokół nich, jak zauważyła @ Thor84no.

Jeśli wrócą (lub może wrócić) więcej niż rząd, zamiast próbować to:

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

lub jeśli warunki są bardzo różne:

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

Dzięki! Chociaż w rzeczywistości brakowało nawiasów, twój komentarz był edukacyjny! – netiul