从 pg-promise 中过滤 CSV 只获取数组中的第一个值



我的pg-promise查询(传入数组中的2个id(:

db.any(`SELECT * FROM users WHERE user_id IN ($1:csv)`, team.member_ids)

传递给 pg-promise 的查询和参数的控制台输出:

SELECT * FROM users WHERE user_id IN ($1:csv) [ 1, 2 ]
//Fails one row returned, two expected

但是我只得到一个结果。如果我在 psql 中运行以下查询,我会得到两个结果:

select * from users where user_id IN (1,2);
//Works successfully with two rows returned

任何帮助不胜感激!

这在查询格式中进行了说明,一个值与数组如何更改值解释:

然而,这只适用于numberbigintstringbooleanDatenull的类型,因为像ArrayObject这样的类型会改变参数的解释方式。

db.any(`SELECT * FROM users WHERE user_id IN ($1:csv)`, team.member_ids)
//=> SELECT * FROM users WHERE user_id IN (1)

因为在上面你直接传入值数组本身,$1指的是该数组中的第一个元素。要使$1引用整个值数组,该值本身需要位于数组中:

db.any(`SELECT * FROM users WHERE user_id IN ($1:csv)`, [team.member_ids])
//=> SELECT * FROM users WHERE user_id IN (1,2)

或者,建议使用命名参数使代码更加简洁:

db.any(`SELECT * FROM users WHERE user_id IN ($<member_ids:csv>)`, team)
//=> SELECT * FROM users WHERE user_id IN (1,2)

通常,使用 pg-monitor 查看正在执行的查询。

相关内容

最新更新