Ответ 1
Try:
INSERT INTO user_subservices(user_id, subservice_id)
SELECT 1 id, x
FROM unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) x
У меня есть таблица, в которой я пытаюсь обновить сразу несколько значений. Вот схема таблицы:
Column | Type | Modifiers
---------------+---------+-----------
user_id | integer |
subservice_id | integer |
У меня есть user_id
и хочу вставить сразу несколько subservice_id
. Есть ли синтаксис в Postgres
, который позволит мне сделать что-то вроде этого
insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
Как мне это сделать?
Try:
INSERT INTO user_subservices(user_id, subservice_id)
SELECT 1 id, x
FROM unnest(ARRAY[1,2,3,4,5,6,7,8,22,33]) x
Синтаксис добавления нескольких значений:
insert into table values (1,1), (1,2), (1,3), (2,1);
Но крокодилко ответ гораздо более сложен.
Немного связанный ответ, потому что я постоянно нахожу этот вопрос каждый раз, когда пытаюсь запомнить это решение. Вставить несколько строк с несколькими столбцами:
insert into user_subservices (user_id, subservice_id)
select *
from unnest(array[1, 2], array[3, 4]);
Более короткая версия krokodilko отвечает:
insert into user_subservices(user_id, subservice_id)
values(1, unnest(array[1, 2, 3]));
Более надежный пример, когда вам нужно вставить несколько строк в некоторую таблицу для каждой строки в другой таблице:
INSERT INTO user_subservices (user_id, subservice_id)
SELECT users.id AS user_id, subservice_id
FROM users
CROSS JOIN unnest(ARRAY[1,2,3]) subservice_id;
`` `