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

jha*_*amm 74 postgresql

我有一个表,我试图一次更新多个值.这是表模式:

    Column     |  Type   | Modifiers 
---------------+---------+-----------
 user_id       | integer | 
 subservice_id | integer |
Run Code Online (Sandbox Code Playgroud)

我有,user_id并希望subservice_id一次插入多个.是否有一种语法Postgres可以让我做这样的事情

insert into user_subservices(user_id, subservice_id) values(1, [1, 2, 3]);
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Sco*_*owe 149

多值插入语法是:

insert into table values (1,1), (1,2), (1,3), (2,1);
Run Code Online (Sandbox Code Playgroud)

但krokodilko的答案更加流畅.

  • @sankarmuniyaappa,您必须对要插入的文本使用单引号 '' '` 。因此,“插入orders_cancel_reasons_infos值(1,1,'改变了主意',1),(2,2,'质量不满意',1)”将起作用。您可以检查[this](/sf/ask/2897733681/ Between-single-quotes-and-double-quotes-in-postgresql)以了解有关单引号和双引号的更多信息-引号。 (4认同)
  • 是的,使用返回."插入表(id,yada)值(1,2),(9,22)返回id;" 等等 (2认同)
  • 不知道为什么 krokodilko 的答案是“更圆滑”...我认为这应该是公认的答案,因为这是 SQL 标准语法,也更容易理解。 (2认同)

kro*_*lko 50

尝试:

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
Run Code Online (Sandbox Code Playgroud)

演示:http://www.sqlfiddle.com/#!15/ 9a006/1


yal*_*lie 19

更简洁的krokodilko的答案:

insert into user_subservices(user_id, subservice_id) 
values(1, unnest(array[1, 2, 3]));
Run Code Online (Sandbox Code Playgroud)

  • 这两个答案都是PostgreSQL特有的.接受的答案可能更容易转换为其他数据库,例如Oracle:`insert into user_subservices(user_id,subservice_id)select 1,column_value from table(sys.odcinumberlist(1,2,3))`. (3认同)
  • 将其与另一个表中的信息一起使用的方法:`insert into user_subservices(user_id, subservice_id)values(1, unnest(ARRAY(select id from subservices where name like '%test%')));` (2认同)

And*_*ren 8

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

insert into user_subservices (user_id, subservice_id)
select *
from unnest(array[1, 2], array[3, 4]);
Run Code Online (Sandbox Code Playgroud)