PostgreSQL:如何在没有多个选择的情况下插入多个值?
我有一个问题,我需要插入到一个有2个条目的表中,其中一个值是常量,但从另一个表中获取,另一个值是更改的实际内容 目前我有一些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
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。一个没有名字的马的答案也很有价值,但这个更接近实际问题。我希望我能接受两个答案