Ell*_*Ell 5 postgresql insert subquery case postgresql-11
我正在使用 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)
有什么方法可以实现所需的查询输出?
(对于上下文:我这样做的原因是因为还有进一步的查询依赖于知道插入是否发生在特定行上。
这是通过将我的查询从每行一个转换为每列一个来更有效地从文件中插入一些数据的努力的一部分。不过,我不是在寻找其他提高插入速度的技巧,如果不可能,我很高兴在这一点上结束。)
小智 4
我只是将查询逻辑和插入逻辑分开:
with vals (a,b) as (
VALUES (1, null), (null, 2), (2, 3)
), new_rows as (
insert into all_sums (sum)
select a + b
from vals
where a + b is not null
)
select a + b
from vals;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |