Mam tabelę, którą próbuję zaktualizować wiele wartości jednocześnie. Oto schemat tabeli:
Column | Type | Modifiers
---------------+---------+-----------
user_id | integer |
subservice_id | integer |
Mam user_id
i chcę wstawić wiele subservice_id
plików jednocześnie. Czy jest w Postgres
tym składnia , która pozwoli mi zrobić coś takiego
insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
Jak bym to zrobił?
postgresql
jhamm
źródło
źródło
generate_series
zobacz dba.stackexchange.com/a/89544/16892Odpowiedzi:
Próbować:
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
Demo: http://www.sqlfiddle.com/#!15/9a006/1
źródło
Składnia wstawiania wielu wartości to:
insert into table values (1,1), (1,2), (1,3), (2,1);
Ale odpowiedź krokodilko jest znacznie lepsza.
źródło
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);
' '
dla wstawianego tekstu. więc coś w styluinsert into orders_cancel_reasons_infos values (1,1,'Changed my mind',1), (2,2,'Quality not satisfactory',1)
będzie działać. Można sprawdzić to na więcej pojedynczych i podwójnych cudzysłowów.Krótsza wersja odpowiedzi Krokodilko:
insert into user_subservices(user_id, subservice_id) values(1, unnest(array[1, 2, 3]));
źródło
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%')));
Trochę pokrewna odpowiedź, ponieważ za każdym razem, gdy próbuję zapamiętać to rozwiązanie, napotykam to pytanie. Wstaw wiele wierszy z wieloma kolumnami :
insert into user_subservices (user_id, subservice_id) select * from unnest(array[1, 2], array[3, 4]);
źródło
Bardziej solidny przykład, gdy trzeba wstawić wiele wierszy do jednej tabeli dla każdego wiersza w innej tabeli:
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;
źródło