Postgresql
包括未插入的行作為 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;
應該導致表格
all_sums
如下所示:all_sums: sum ------ 5 (1 row)
但查詢的輸出應該是:
null null 5 ------ (3 rows)
此範例因語法錯誤而失敗:
ERROR: syntax error at or near "INTO"
有什麼方法可以實現所需的查詢輸出?
(對於上下文:我這樣做的原因是因為還有進一步的查詢依賴於知道插入是否發生在特定行上。
這是通過將我的查詢從每行一個轉換為每列一個來更有效地從文件中插入一些數據的努力的一部分。不過,我並不是在尋找其他提高插入速度的技巧,如果不可能,我很樂意在這一點上結束它。)
我只是將查詢邏輯和插入邏輯分開:
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;