小编Ell*_*Ell的帖子

作为 INSERT INTO ... RETURNING 的结果包括未插入的行

我正在使用 PostgreSQL 11。我想有条件地将值插入表中,同时插入的结果包括null未导致插入的输入的每一行。

例如

CREATE TABLE all_sums (sum INTEGER);
SELECT
    CASE WHEN a_sum IS NULL THEN null
         ELSE (SELECT sum FROM (INSERT INTO sums (sum) VALUES (sum) RETURNING sum))
    END
FROM
    (SELECT a + b FROM (VALUES (1, null), (null, 2), (2, 3)) AS row (a, b))
AS a_sum;
Run Code Online (Sandbox Code Playgroud)

应该导致表格all_sums看起来像:

all_sums: sum
         ------
           5
         (1 row)
Run Code Online (Sandbox Code Playgroud)

但查询的输出应该是:

 null
 null
 5
------
(3 rows)
Run Code Online (Sandbox Code Playgroud)

此示例因语法错误而失败:

ERROR:  syntax error at or near "INTO"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以实现所需的查询输出?


(对于上下文:我这样做的原因是因为还有进一步的查询依赖于知道插入是否发生在特定行上。

这是通过将我的查询从每行一个转换为每列一个来更有效地从文件中插入一些数据的努力的一部分。不过,我不是在寻找其他提高插入速度的技巧,如果不可能,我很高兴在这一点上结束。)

postgresql insert subquery case postgresql-11

5
推荐指数
1
解决办法
356
查看次数

标签 统计

case ×1

insert ×1

postgresql ×1

postgresql-11 ×1

subquery ×1