Nestjs / Express中的WHERE ANY查询工作正常:
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}
为什么会发生这种错误?我在整数数组列中搜索整数。
答案 0 :(得分:4)
简而言之: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[]