【发布时间】:2021-10-01 15:06:01
【问题描述】:
我有多个 (> 100) 个 PostgreSQL INSERT 语句,它们看起来都像这个,但有不同的选择:
INSERT INTO schema.table (geom, name, label, flag, type)
SELECT (geom, <complicated string concatenation from multiple fields>, the_label, TRUE, type_id)
FROM abc.xzy a WHERE a.changelog = 1
ORDER BY a.num;
当然,SQL 查询可能会改变,但它的输出是为了满足INSERT 的要求。
我想用一个INSERT 来完成这一切。也许使用 VALUES 子句,例如:
INSERT INTO ... VALUES
(val1,val2,val3,val4,...)
, (val11,val12,val13,val14,...)
这表明 here 可以使用简单的“静态”值(不是来自 SELECT 语句)。
但它不适用于SELECT 来获取INSERT 的值:
INSERT INTO schema.table (geom, name, label, flag, type)
VALUES
(
SELECT (geom, <complicated string concatenation from multiple fields>, the_label, TRUE, type_id)
FROM abc.xzy a WHERE a.changelog = 1
ORDER BY a.num
),
(
SELECT (geom, <complicated string concatenation from multiple fields>, a_label, FALSE, type_id)
FROM def.uvt a WHERE a.typedf
ORDER BY a.idx
),
...
);
我收到一个错误:subquery must return only one column 在第一个左括号上,就在第一个 SELECT 之前。
如果可能的话,我该如何解决这个问题?
PG 版本 >= 9.6。
【问题讨论】:
标签: sql postgresql sql-insert