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

WITH _in (name, cash, checks) AS (
    VALUES (UPPER($1), 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表中实际执行以下插入操作:
record 0 :   name, cash[1], check[1]
record 1 :   name, cash[2], check[2]
record 2 :   name, cash[3], check[3]

等。。。
能做到吗?
短暂性脑缺血发作

最佳答案

使用unest:

WITH _in (name, cash, checks) AS (
    VALUES (UPPER($1), 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)[]而不是“简单”数字。
具体如何传递该值取决于所使用的编程语言和框架。

关于arrays - 如何使用VALUES将数组接受到CTE,然后作为单独的记录插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58947254/

10-11 09:18