【发布时间】:2020-06-06 13:08:41
【问题描述】:
我想在同一个查询中在 Postgres DB 表中插入几行数据,但是需要使用子查询的标量结果和传递的绑定参数来计算其中一列的值。计算是两个 Postgres 数组的串联。
我可以通过这样的查询来做到这一点:
INSERT INTO my_table (col1, col2, computed_col)
VALUES
(
:col1Val1,
:col2val1,
(SELECT some_col FROM some_table WHERE id = :id) || ARRAY[:computed_col1]::bigint[]
),
(
:col1Val2,
:col2val2,
(SELECT some_col FROM some_table WHERE id = :id) || ARRAY[:computed_col2]::bigint[]
);
CTE 也可以,但它看起来没有必要,因为我们仍然需要从 CTE“表”中为每组值进行 SELECT 子查询。
如您所见,SELECT 子查询对于要插入的每组数据都是相同的。那么是否有可能以某种方式指定单个子查询并重用结果而不重复 SELECT 子查询,或者是否有其他方法可以优化上述查询?
从性能的角度来看,查询会导致哪些问题?
【问题讨论】:
标签: sql database postgresql insert sql-insert