如何使用 VALUES 接受数组到 CTE,然后作为单独的记录插入

How to accept arrays to CTE using VALUES and then insert as separate records

PostgreSQL 11.1

我想在 PostgreSQL 中做类似的事情,但不知道如何读取数组或如何从数组中插入。我卡住了。

WITH _in (name, cash, checks) AS (
    VALUES (UPPER(), ARRAY[]::numeric(10,2), ARRAY[]::numeric(10,2)
)
INSERT INTO payments(name, cash, checks)
SELECT n.name, n.cash, n.checks
FROM _in n;

也就是说,我需要 CTE 接受现金数组和支票数组——现金数组和支票数组彼此一对一并将其与单个名称值匹配。因此,我希望 INSERT INTO payments 实际上对 payments table:

进行以下插入
record 0 :   name, cash[1], check[1]
record 1 :   name, cash[2], check[2]
record 2 :   name, cash[3], check[3]

等...

这可以做到吗?

TIA

使用unnest:

WITH _in (name, cash, checks) AS (
    VALUES (UPPER(), ARRAY[...]::numeric(10,2)[], ARRAY[...]::numeric(10,2)[])
)
INSERT INTO payments(name, cash, checks)
SELECT n.name, unnest(n.cash), unnest(n.checks)
FROM _in n;

请注意,您需要转换为数组 ::numeric(10,2)<b>[]</b> 而不是 "simple"数字。

您传递该值的具体方式取决于您使用的编程语言和框架。