我正在尝试编写一个 delete 语句,并且 return 子句将 id 作为对象数组返回,如下所示:[{simcard_id: 1},{simcard_id: 2},{simcard_id: 3},]但我希望它返回一个数字数组:[1, 2, 3]有没有办法让语句返回一个只有数字的数组?我尝试了一些聚合函数,但我不断收到错误,说我无法在返回语句中执行array_agg函数。我也尝试这样做:RETURNING ARRAY[simcard_id]但后来它变得很奇怪。我不是sql的最佳人选,所以任何帮助将不胜感激。我知道我可以映射值并返回一个数字数组,但我想借此机会了解我是否可以使用sql来做到这一点。下面是 sql 查询。它使用 nodejs 的 postgres 库。 const simcardsIds = await sql` DELETE FROM simcards WHERE simcard_id = ANY(${sql.array(simcards)}) RETURNING simcard_id `
1 回答

米脂
TA贡献1836条经验 获得超3个赞
你可以使用这样的东西来接近它:
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]
添加回答
举报
0/150
提交
取消