我遇到的问题是我需要插入一个包含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中完成上述操作?
答案 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;