Postgresql IN 错误:运算符不存在整数 = 整数[]



这个 WHERE ANY 查询在 Nestjs/Express 中工作正常:

const sql = 'SELECT * FROM members WHERE '+ integerId + ' = ANY(skill_id_array)';
const membersBySkill = await this.entityManager.query(sql

(;

此 WHERE IN 查询失败,并显示此帖子的标题错误消息:

const sql = 'SELECT * FROM members WHERE '+ integerId + ' IN (skill_id_array)';
const membersBySkill = await this.entityManager.query(sql);

我对SQL的理解是IN和ANY应该是几乎相同的查询,结果几乎相同。

integerId is a var integer such as 2.
skill_id_array in Postgres looks like this: {1,2,5}

为什么会发生此错误? 我正在用整数数组列中的整数进行搜索。

简而言之:in()需要一个标量列表,而any()需要一个数组表达式。

根据文档:

表达式 IN (值 [, ...](

右侧是标量表达式的括号列表。

例:

where integerid in (1, 2, 5)

表达式运算符 ANY(数组表达式(

右侧是一个带括号的表达式,它必须生成一个数组值。

例:

where integerid = any ('{1, 2, 5}');

因为

Postgres中的skill_id_array如下所示:{1,2,5}

因此,当传递给查询时,表达式括在单引号中,您可以将其与any()一起使用。如果你对in()做同样的事情,你显然会得到无效的语法:

where integerid in ('{1, 2, 5}');
ERROR:  invalid input syntax for integer: "{1, 2, 5}"   

或者,如果您的 ORM 使用自动铸造:

where integerid in ('{1, 2, 5}'::int[]);
ERROR:  operator does not exist: integer = integer[]

相关内容

  • 没有找到相关文章

最新更新