У меня есть таблица, в которой я пытаюсь обновить сразу несколько значений. Вот схема таблицы:
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]);
Как мне это сделать?
postgresql
джхамм
источник
источник
generate_series
см. Dba.stackexchange.com/a/89544/16892Ответы:
Пытаться:
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
Демо: http://www.sqlfiddle.com/#!15/9a006/1
источник
Синтаксис многозначной вставки:
insert into table values (1,1), (1,2), (1,3), (2,1);
Но ответ Крокодилко гораздо хитрее.
источник
id
?insert into orders_cancel_reasons_infos values (1,1,"Changed my mind",1), (2,2,"Quality not satisfactory",1), (3,3,"Incompatible or not useful",1), (4,4,"Damaged product but shipping box is good",1), (5,5,"Items arrived too late",1), (6,6,"Missing part or accessories",1), (7,7,"Product and shipping box are damaged",1), (8,8,"Wrong item was sent",1), (9,9,"Defective item",1), (10,10,"Inaccurate description",1), (11,11,"Other",1);
' '
для текста, который вы вставляете. так что-то вроде,insert into orders_cancel_reasons_infos values (1,1,'Changed my mind',1), (2,2,'Quality not satisfactory',1)
будет работать. Вы можете проверить это , чтобы узнать больше об одинарных и двойных кавычках.Укороченный вариант ответа Крокодилко:
insert into user_subservices(user_id, subservice_id) values(1, unnest(array[1, 2, 3]));
источник
insert into user_subservices(user_id, subservice_id) select 1, column_value from table(sys.odcinumberlist(1,2,3))
.insert into user_subservices(user_id, subservice_id) values(1, unnest(ARRAY(select id from subservices where name like '%test%')));
Слегка связанный ответ, потому что я все время нахожу этот вопрос каждый раз, когда пытаюсь вспомнить это решение. Вставьте несколько строк с несколькими столбцами :
insert into user_subservices (user_id, subservice_id) select * from unnest(array[1, 2], array[3, 4]);
источник
Более надежный пример, когда вам нужно вставить несколько строк в одну таблицу для каждой строки в другой таблице:
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;
источник