是否可以从返回子句中的Postgresql插入语句返回ID数组?

问题描述 投票:0回答:1

我正在尝试编写一条delete语句,并且returning子句将id作为这样的对象数组返回:

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

但是我希望它返回这样的数字数组:

[1, 2, 3]

有没有一种方法可以使该语句返回一个仅包含数字的数组?我尝试了一些聚合函数,但始终收到错误消息,说我不能在返回的语句中执行array_agg函数。我也尝试这样做:

RETURNING ARRAY[simcard_id]

但是后来变得很奇怪。

我不是sql方面的专家,所以将不胜感激。

[我知道我可以映射值并返回数字数组,但是我想借此机会学习是否可以使用sql。

这里是sql查询。它正在将postgres库用于nodejs。

      const simcardsIds = await sql`
      DELETE FROM simcards
      WHERE simcard_id = ANY(${sql.array(simcards)})
      RETURNING simcard_id
      `
javascript sql postgresql sql-insert sql-returning
1个回答
0
投票

您可以使用类似的方法接近它:

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]
© www.soinside.com 2019 - 2024. All rights reserved.