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 que vous souhaitez insérer plusieurs subservice_id
est à la fois. Y a-t-il une syntaxe dans Postgres
qui me permette de faire quelque chose comme ceci
insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
Comment je ferais ça?
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
La syntaxe d'insertion à valeurs multiples est la suivante:
insert into table values (1,1), (1,2), (1,3), (2,1);
Mais la réponse de Krokodilko est beaucoup plus subtile.
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]));
Une réponse légèrement liée car je continue à trouver cette question chaque fois que j'essaie de me souvenir de cette solution. Insérer plusieurs lignes avec plusieurs colonnes:
insert into user_subservices (user_id, subservice_id)
select *
from unnest(array[1, 2], array[3, 4]);
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;