J'ai une table que j'essaye de mettre à jour plusieurs valeurs à la fois. Voici le schéma de la table:
Column | Type | Modifiers
---------------+---------+-----------
user_id | integer |
subservice_id | integer |
J'ai le user_id
et je veux insérer plusieurs subservice_id
à la fois. Y a-t-il une syntaxe Postgres
qui me permettra de faire quelque chose comme ça
insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
Comment ferais-je cela?
postgresql
jhamm
la source
la source
generate_series
voir dba.stackexchange.com/a/89544/16892Réponses:
Essayer:
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
Démo: http://www.sqlfiddle.com/#!15/9a006/1
la source
La syntaxe d'insertion à valeurs multiples est:
insert into table values (1,1), (1,2), (1,3), (2,1);
Mais la réponse de Krokodilko est beaucoup plus astucieuse.
la source
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);
' '
pour le texte que vous insérez. donc quelque chose comme,insert into orders_cancel_reasons_infos values (1,1,'Changed my mind',1), (2,2,'Quality not satisfactory',1)
fonctionnera. Vous pouvez vérifier cela pour plus d'informations sur les guillemets simples et doubles.Une version plus courte de la réponse de Krokodilko:
insert into user_subservices(user_id, subservice_id) values(1, unnest(array[1, 2, 3]));
la source
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%')));
Une réponse un peu liée car je n'arrête pas de trouver cette question à chaque fois que j'essaye de me souvenir de cette solution. Insérez plusieurs lignes avec plusieurs colonnes :
insert into user_subservices (user_id, subservice_id) select * from unnest(array[1, 2], array[3, 4]);
la source
Exemple plus robuste, lorsque vous devez insérer plusieurs lignes dans une table pour chaque ligne d'une autre table:
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;
la source