我正在尝试编写一条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
`
您可以使用以下方法接近此值:
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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句