Postgresql 如何一次将多个值插入postgres表?

Postgresql 如何一次将多个值插入postgres表?,postgresql,Postgresql,我有一个表,我试图一次更新多个值。以下是表架构: Column | Type | Modifiers ---------------+---------+----------- user_id | integer | subservice_id | integer | 我有用户id,希望一次插入多个子服务id。Postgres中有没有语法可以让我做这样的事情 insert into user_subservices(user_id, subservic

我有一个表,我试图一次更新多个值。以下是表架构:

    Column     |  Type   | Modifiers 
---------------+---------+-----------
 user_id       | integer | 
 subservice_id | integer |
我有用户id,希望一次插入多个子服务id。Postgres中有没有语法可以让我做这样的事情

insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
我该怎么做?

试试:

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

演示:

多值插入语法为:

insert into table values (1,1), (1,2), (1,3), (2,1);

但是krokodilko的答案要圆滑得多。

这是一个稍微相关的答案,因为我每次试图记住这个解决方案时都会不断发现这个问题。插入多行多列:


krokodilko回答的简短版本:

insert into user_subservices(user_id, subservice_id) 
values(1, unnest(array[1, 2, 3]));

更健壮的示例,例如,当需要为另一个表中的每一行向某个表中插入多行时:

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;

如果你想从序列中插入它们,或者使用generate_series,我认为这比公认的答案更能表达你的意图。这是标准SQL还是特定于PostgreSQL?两个答案都是特定于PostgreSQL的。接受的答案可能更容易转换到其他数据库,例如Oracle:插入到用户子服务SUSER\U id,子服务id选择1,表中的列值。odcinumberlist1,2,3.Thank,在我看来,这比公认的答案更有意义,也更具可读性。将其与另一个表中的信息一起使用的一种方法是:插入到user_subservicesuser_id,subservice_id值1,unnestARRAYselect id from subservices,其中名称为“%test%”;使用这两种方法中的任何一种,是否也可以返回id?是的,使用returning。在表id中插入yada值1,2,9,22返回id;现在CTE aka WITH语句通常工作得很好。整数值可以像上面那样插入。但在使用上述方法插入文本时,不存在类似列的获取错误。在订单中插入\u取消\u原因\u信息值1,1,改变主意,1,2,2,质量不满意,1,3,3,不兼容或不可用,1,4,4,产品损坏但装运箱完好,1,5,5,项目到货太迟,1,6,6,缺少零件或附件,1,7,7,产品和装运箱损坏,1,8,8,发送错误项目,1,9,9,缺陷项目,1,10,10,描述不准确,1,11,11,其他,1@sankarmuniyappa您必须对插入的文本使用单引号“”。例如,在订单中插入\u取消\u原因\u信息值1,1,'改变了主意',1,2,2,'质量不满意',1将起作用。您可以查看单引号和双引号的更多信息。
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;