2011-09-27 111 views
16

是否有这样的查询可能? MySQL给我一个语法错误。多次插入值与嵌套选择...带有多个嵌套SELECT的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') 

回答

26

我刚刚测试了以下(它的工作原理):

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

我想这个问题我你没有得到()你的选择,因为这个查询不会没有它的工作。

+0

确实是这个问题。它有多简单...... – netiul

13

当你有一个这样的子查询,它必须返回一列一行只。如果你的子查询只返回一行,那么你需要在它们周围使用括号,就像@ Thor84no注意到的那样。

如果他们返回(或可能返回),比排多,试试这个来代替:

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

,或者如果你的条件有很大的不同:

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

谢谢!虽然问题确实遗漏了括号,但您的评论很有教育意义! – netiul