You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PostgreSQL的SELECT和WHERE IN查询仅返回值数组?

问题说明

我有一张名为orders的表,结构如下:

idvaluepriceamount
2'orange'$127
8'yellow'$1429
5'green'$179

我需要执行带WHERE IN子句的SELECT查询,原SQL语句为:

SELECT value FROM orders WHERE id IN (2, 5);

对应的Knex.js代码:

knex('orders')
      .select('value')
      .whereIn('id', [2, 5])

当前返回的是对象数组:

[{value: 'orange'}, {value: 'green'}] 

请问如何使用PostgreSQL语法仅返回值数组:

['orange', 'green']

解决方案

1. PostgreSQL原生SQL实现

使用PostgreSQL内置的array_agg()聚合函数,直接将查询结果聚合为数组:

SELECT array_agg(value) FROM orders WHERE id IN (2, 5);

如果需要保证返回数组的元素顺序和IN子句中的id顺序一致,可以添加排序规则:

SELECT array_agg(value ORDER BY id) FROM orders WHERE id IN (2, 5);

2. Knex.js适配实现

在Knex中通过raw()方法调用PostgreSQL的聚合函数,代码示例:

knex('orders')
  .select(knex.raw('array_agg(value) as values_array'))
  .whereIn('id', [2, 5])
  .then(result => {
    const values = result[0].values_array;
    console.log(values); // 输出 ['orange', 'green']
  });

若需要按id顺序排列结果:

knex('orders')
  .select(knex.raw('array_agg(value ORDER BY id) as values_array'))
  .whereIn('id', [2, 5])
  .then(result => {
    const values = result[0].values_array;
    console.log(values);
  });

内容的提问来源于stack exchange,提问作者TwittorDrive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 02:20:19