MySQL INSERT с несколькими вложенными SELECT - PullRequest
18 голосов
/ 27 сентября 2011

Возможен ли такой запрос? 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')

Ответы [ 2 ]

28 голосов
/ 27 сентября 2011

Я только что проверил следующее (что работает):

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

Я предполагаю, что проблема в том, что у вас нет () с вашими выборами, так как этот запрос не будет работать без него.

14 голосов
/ 27 сентября 2011

Если у вас есть подобный подзапрос, он должен возвращать только один столбец и только одну строку .Если ваши подзапросы возвращают только одну строку, то вам нужно заключить их в круглые скобки, как заметил @ 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' )
...