我正在尝试将一组项目传递给
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)
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})
// ^ ^