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

时间:2016-02-16 16:04:49

标签: 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 name = 'Smith'), 5),
  ...

由于这是非常丑陋的,如何在没有SELECT重复的情况下在Postgres中完成上述操作?

3 个答案:

答案 0 :(得分:4)

您可以将select的结果与您的值交叉加入:

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);

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

答案 1 :(得分:4)

又一个解决方案:

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

答案 2 :(得分:0)

嗯,我相信你可以这样做:

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;