在 PG-Promise 中将数组作为值传递只会得到一个结果

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

我正在尝试将一组项目传递给

SELECT
查询并获取包含这些项目的所有行。

到目前为止,我已经使用

join
方法让它工作,但我更愿意只传递数组并了解我做错了什么。也许我应该使用
join
方法?

这有效:

var values = ['WH12345678','WH22345678']
values = "'" + values.join("','") + "'";
var query = "select * from pups where workorder IN (" + values + ")"
db.any(query)

我无法让它工作,尝试了很多变体:

注意:它执行当前的“工作”,因为它返回第一个项目行,但不是两者。

var values = ['WH12345678','WH22345678']
var values = ["WH12345678","WH22345678"]
var query = "select * from pups WHERE workorder IN ($1:list)"
var query = "select * from pups WHERE workorder IN ($1:csv)"
db.any(query,values)
javascript postgresql pg-promise
1个回答
2
投票

来自

db.any
的文档:

值可以是:

  • 单个值 - 替换所有
    $1
    出现的情况
  • 值数组 - 替换所有
    $1
    $2
    、...变量
  • 一个对象 - 应用命名参数格式

由于您传递了一个数组 (

['WH12345678','WH22345678']
),因此适用第二种情况:
$1
扩展为
'WH12345678'
$2
(您在查询中未使用)将扩展为
'WH22345678'

您需要传递一个数组,该数组将

values
数组作为其第一个元素,并且没有其他参数作为其他元素:

var values = ["WH12345678","WH22345678"];
var query = "select * from pups WHERE workorder IN ($1:list)";
db.any(query, [values])
//            ^      ^

或者,传递一个对象以使用命名参数:

var values = ["WH12345678","WH22345678"];
var query = "select * from pups WHERE workorder IN (${values:list})";
//                                                    ^^^^^^
db.any(query, {values})
//            ^      ^
© www.soinside.com 2019 - 2024. All rights reserved.