PostgreSQL:如何在没有多个选择的情况下插入多个值?

PostgreSQL:如何在没有多个选择的情况下插入多个值?,sql,postgresql,sql-insert,Sql,Postgresql,Sql Insert,我有一个问题,我需要插入到一个有2个条目的表中,其中一个值是常量,但从另一个表中获取,另一个值是更改的实际内容 目前我有一些 INSERT INTO table (id, content) VALUES ((SELECT id FROM customers WHERE name = 'Smith'), 1), ((SELECT id FROM customers WHERE name = 'Smith'), 2), ((SELECT id FROM customers WHERE

我有一个问题,我需要插入到一个有2个条目的表中,其中一个值是常量,但从另一个表中获取,另一个值是更改的实际内容

目前我有一些

INSERT INTO table (id, content) VALUES 
  ((SELECT id FROM customers WHERE name = 'Smith'), 1),
  ((SELECT id FROM customers WHERE name = 'Smith'), 2),
  ((SELECT id FROM customers WHERE name = 'Smith'), 5),
  ...

由于这非常难看,我如何在Postgres中执行上述操作,而不必不断重复选择?

您可以将选择的结果与您的值交叉连接起来:

INSERT INTO table (id, content) 
select c.id, d.nr 
from (
  select id 
  from customers 
  where name = 'Smith'
) as c 
  cross join (values (1), (2), (5) ) as d (nr);

这假设名称是唯一的(但您的原始解决方案也是唯一的)。

好吧,我相信您可以这样做:

DECLARE
id customers.id%TYPE; 
BEGIN
select c.id into id FROM customers c WHERE name = 'Smith';
INSERT INTO table (id, content) VALUES 
(id, 1),
(id, 2),
....
END;
另一个解决方案:

insert into table (id, content)
select id, unnest(array[1, 2, 5]) from customers where name = 'Smith';

只是为了好玩:
select id,unnest(数组[1,2,5]),从name='Smith'的客户那里选择。
你应该把它变成一个答案Abelisto。一个没有名字的马的答案也很有价值,但这个更接近实际问题。我希望我能接受两个答案