2011-09-27 86 views
16

Có phải một truy vấn như thế này có thể không? MySQL cho tôi một lỗi cú pháp. Nhiều chèn-giá trị với Selects lồng nhau ...MySQL INSERT với nhiều SELECT lồng nhau

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

Trả lời

26

Tôi vừa thử nghiệm như sau (hoạt động):

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

Tôi tưởng tượng vấn đề tôi s mà bạn chưa có() xung quanh các lựa chọn của bạn vì truy vấn này sẽ không hoạt động nếu không có nó.

+0

Đó thực sự là vấn đề. Làm thế nào đơn giản nó có thể được ... – netiul

13

Khi bạn có một subquery như thế, nó phải trả lại một cột và một hàng chỉ. Nếu truy vấn phụ của bạn chỉ trả về một hàng, thì bạn cần dấu ngoặc đơn xung quanh chúng, như @ Thor84no nhận thấy.

Nếu họ trở về (hoặc có thể trở lại) hơn hàng, hãy thử này để thay thế:

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

hoặc nếu điều kiện của bạn là rất khác nhau:

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

Cảm ơn! Mặc dù vấn đề thực sự thiếu dấu ngoặc đơn, nhận xét của bạn là giáo dục! – netiul

Các vấn đề liên quan