是否可以从 returning 子句中的 Postgresql 插入语句 return 一个 id 数组?
Is it possible to return an array of ids from a Postgresql insert statement within the returning clause?
我正在尝试编写一个删除语句,returning 子句 return 将 id 作为对象数组:
[
{simcard_id: 1},
{simcard_id: 2},
{simcard_id: 3},
]
但我希望它成为 return 这样的数字数组:
[1, 2, 3]
有没有办法让 return 语句成为一个仅包含数字的数组?我尝试了一些聚合函数,但我不断收到错误消息,说我不能在 returning 语句中执行 array_agg 函数。我也尝试这样做:
RETURNING ARRAY[simcard_id]
但后来就变得奇怪了。
我在 sql 方面不是最擅长的,所以任何帮助将不胜感激。
我知道我可以通过值和 return 一组数字进行映射,但我想借此机会了解我是否可以使用 sql.
这里是 sql 查询。它正在为 nodejs 使用 postgres 库。
const simcardsIds = await sql`
DELETE FROM simcards
WHERE simcard_id = ANY(${sql.array(simcards)})
RETURNING simcard_id
`
您可以使用类似这样的方法来接近它:
with x as (
delete from simcards
where simcard_id in (1,2)
returning simcard_id
)
select array_agg(simcard_id) as y from x;
这会给你这样的输出:
y
-----------
{1,2}
你可以像这样走得更远:
with x as (
delete from simcards
where simcard_id in (1,2)
returning simcard_id
),
main as (select array_agg(simcard_id) as y from x)
select replace( replace(y::text, '{', '['), '}', ']') as out from main;
那会给你:
out
-------
[1,2]
我正在尝试编写一个删除语句,returning 子句 return 将 id 作为对象数组:
[
{simcard_id: 1},
{simcard_id: 2},
{simcard_id: 3},
]
但我希望它成为 return 这样的数字数组:
[1, 2, 3]
有没有办法让 return 语句成为一个仅包含数字的数组?我尝试了一些聚合函数,但我不断收到错误消息,说我不能在 returning 语句中执行 array_agg 函数。我也尝试这样做:
RETURNING ARRAY[simcard_id]
但后来就变得奇怪了。
我在 sql 方面不是最擅长的,所以任何帮助将不胜感激。
我知道我可以通过值和 return 一组数字进行映射,但我想借此机会了解我是否可以使用 sql.
这里是 sql 查询。它正在为 nodejs 使用 postgres 库。
const simcardsIds = await sql`
DELETE FROM simcards
WHERE simcard_id = ANY(${sql.array(simcards)})
RETURNING simcard_id
`
您可以使用类似这样的方法来接近它:
with x as (
delete from simcards
where simcard_id in (1,2)
returning simcard_id
)
select array_agg(simcard_id) as y from x;
这会给你这样的输出:
y
-----------
{1,2}
你可以像这样走得更远:
with x as (
delete from simcards
where simcard_id in (1,2)
returning simcard_id
),
main as (select array_agg(simcard_id) as y from x)
select replace( replace(y::text, '{', '['), '}', ']') as out from main;
那会给你:
out
-------
[1,2]