【问题标题】:How to accept arrays to CTE using VALUES and then insert as separate records如何使用 VALUES 将数组接受到 CTE,然后作为单独的记录插入
【发布时间】:2019-11-20 05:23:57
【问题描述】:

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 付款实际上在付款表中执行以下插入操作:

record 0 :   name, cash[1], check[1]
record 1 :   name, cash[2], check[2]
record 2 :   name, cash[3], check[3]

等等……

这个可以吗?

TIA

【问题讨论】:

    标签: arrays postgresql common-table-expression


    【解决方案1】:

    使用不嵌套:

    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)<b>[]</b> 而不是“简单”数字。

    您必须如何准确地传递该值取决于您使用的编程语言和框架。

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2022-09-25
      • 1970-01-01
      • 2023-04-09
      • 2012-05-26
      • 1970-01-01
      • 2012-11-26
      • 2019-04-14
      • 1970-01-01
      相关资源
      最近更新 更多