2014-10-03 2 views
2

Я хочу, чтобы выполнить этот SUDO запрос:Выполнение нескольких вставок с выбранными данными

INSERT INTO table1 (foreign_key, meta_key, meta_value) 
VALUES (
    (SELECT id FROM table2 WHERE condition = 'met'), 'first meta key', 'first meta value' 
) 
VALUES (
    (SELECT id FROM table2 WHERE condition = 'met'), 'second meta key', 'second meta value' 
) 
VALUES (
    (SELECT id FROM table2 WHERE condition = 'met'), 'third meta key', 'third meta value' 
) 

Где строки после SELECT заявлений являются вторыми и третьими аргументами для INSERT

Я думаю, у меня есть INSERT SELECT syntex в принципе правы, но я не уверен в множественности INSERTS. Я знаю, что могу сделать это так, как обычно, с нормальным заявлением INSERT, но я не уверен в том, что SELECT находится внутри предложения VALUES.

Я работаю с живой базой данных, и хотя я все подкреплял, я хочу, чтобы прямые эксперименты были сведены к минимуму.

ответ

1

вы можете использовать UNION:

INSERT INTO table1 (foreign_key, meta_key, meta_value) 
SELECT id, 'first meta key', 'first meta value' FROM table2 WHERE condition = 'met' 
UNION 
SELECT id, 'second meta key', 'second meta value' FROM table2 WHERE condition = 'met' 
UNION 
SELECT id, 'third meta key', 'third meta value' FROM table2 WHERE condition = 'met' 
+0

я, возможно, вызвало недоразумение здесь. Я собираюсь обновить вопрос - не могли бы вы сообщить мне, будет ли это работать? –

+0

Нет, ваш запрос не работает (я использую SQLServer 2005), тот, который работает с union – Hrabal

1

Вам нужно добавить запятую между значениями.

INSERT INTO table1 (foreign_key, meta_key, meta_value) 
VALUES (
    (SELECT id FROM table2 WHERE condition = 'met'), 'first meta key', 'first meta value' 
), 
(
    (SELECT id FROM table2 WHERE condition = 'met'), 'second meta key', 'second meta value' 
), 
(
    (SELECT id FROM table2 WHERE condition = 'met'), 'third meta key', 'third meta value' 
) 

И убедитесь, что каждый дополнительный запрос возвращает только 1 строку.

Попробуйте Sql Fiddle Demo.

Или использовать союз как обычным способом:

INSERT INTO table1 (foreign_key, meta_key, meta_value) 
SELECT id, 'first meta key' , 'first meta value' FROM table2 WHERE condition = 'met') 
UNION ALL 
SELECT id, 'second meta key', 'second meta value' FROM table2 WHERE condition = 'met') 
UNION ALL 
SELECT id, 'third meta key' , 'third meta value' FROM table2 WHERE condition = 'met') 
Смежные вопросы