Saya memiliki tabel yang saya coba perbarui beberapa nilai sekaligus. Berikut skema tabelnya:
Column | Type | Modifiers
---------------+---------+-----------
user_id | integer |
subservice_id | integer |
Saya memiliki user_id
dan ingin menyisipkan beberapa subservice_id
sekaligus. Apakah ada sintaks Postgres
yang memungkinkan saya melakukan sesuatu seperti ini
insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
Bagaimana saya melakukan ini?
postgresql
jhamm
sumber
sumber
generate_series
lihat dba.stackexchange.com/a/89544/16892Jawaban:
Mencoba:
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
sumber
Sintaks penyisipan multi-nilai adalah:
insert into table values (1,1), (1,2), (1,3), (2,1);
Tapi jawaban krokodilko jauh lebih licin.
sumber
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);
' '
untuk teks yang Anda sisipkan. jadi sesuatu seperti,insert into orders_cancel_reasons_infos values (1,1,'Changed my mind',1), (2,2,'Quality not satisfactory',1)
akan berhasil. Anda dapat melihat ini untuk informasi lebih lanjut tentang tanda kutip tunggal dan ganda.Versi pendek dari jawaban krokodilko:
insert into user_subservices(user_id, subservice_id) values(1, unnest(array[1, 2, 3]));
sumber
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%')));
Jawaban yang sedikit terkait karena saya terus menemukan pertanyaan ini setiap kali saya mencoba mengingat solusi ini. Sisipkan beberapa baris dengan beberapa kolom :
insert into user_subservices (user_id, subservice_id) select * from unnest(array[1, 2], array[3, 4]);
sumber
Contoh yang lebih kuat, ketika Anda perlu memasukkan beberapa baris ke dalam beberapa tabel untuk setiap baris di tabel lain:
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;
sumber