MySQL INSERT具有多个嵌套的SELECT

net*_*iul 18 sql select nested insert

这样的查询可能吗?MySQL给了我一个语法错误.具有嵌套选择的多个插入值...

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')
Run Code Online (Sandbox Code Playgroud)

Tho*_*4no 28

我刚刚测试了以下(有效):

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

我想问题是你没有得到()s你的选择,因为没有它,这个查询将无法工作.


ype*_*eᵀᴹ 14

当你有这样的子查询时,它必须只返回一列和一行.如果你的子查询只返回一行,那么你需要在它们周围加括号,如@ Thor84no注意到的那样.

如果他们返回(或可能返回)多于行,请尝试以下方法:

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

或者如果您的条件非常不同:

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' )
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!虽然问题确实缺少括号,但您的评论很有教育意义! (3认同)