是否可以从returning子句中的postgresql insert语句返回id数组?

hvvq6cgz  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(340)

我正在尝试编写一个delete语句,returning子句将id作为对象数组返回,如下所示:

[
{simcard_id: 1},
{simcard_id: 2},
{simcard_id: 3},
]

但我希望它返回一个数字数组:

[1, 2, 3]

有没有办法让语句返回一个只有数字的数组?我尝试了一些聚合函数,但不断出现错误,说我不能在返回语句中执行array\u agg函数。我也试着这样做:

RETURNING ARRAY[simcard_id]

但后来就变得很奇怪了。
我不擅长sql,所以任何帮助都将不胜感激。
我知道我可以Map这些值并返回一个数字数组,但我想借此机会学习一下是否可以使用sql。
下面是sql查询。它正在为nodejs使用postgres库。

const simcardsIds = await sql`
      DELETE FROM simcards
      WHERE simcard_id = ANY(${sql.array(simcards)})
      RETURNING simcard_id
      `
bkhjykvo

bkhjykvo1#

你可以用这样的方法接近它:

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]

相关问题