2011-09-27 35 views
16

Bunu gibi bir sorudur mu? MySQL bana bir sözdizimi hatası veriyor. Böyle bir alt sorgu varsa, bu bir sütun ve bir satır sadece dönmek zorundadırÇoklu iç içe SELECTs ile MySQL INSERT

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

cevap

26

Sadece aşağıdaki test ettik (olan) çalışır:

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

sorunu hayal i Bu sorguyu, o olmadan çalışacağınız gibi seçmediniz.

+0

Gerçekten sorun buydu. Ne kadar basit olabilir ki ... – netiul

13

iç içe seçer ile birden insert-değerler .... Alt sorgularınız yalnızca bir satır döndürüyorsa, etrafınızdaki parantezin olması gerekir.

onlar dönerseniz satırda daha fazla (veya geri dönebilirler), şunu yapmayı deneyin:

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

veya koşullar varsa

çok farklıdır:

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

Teşekkürler! Sorun aslında parantez eksik olsa da, yorumunuz eğiticiydi! – netiul