如何使用 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"数字。
您传递该值的具体方式取决于您使用的编程语言和框架。
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"数字。
您传递该值的具体方式取决于您使用的编程语言和框架。