gpt4 book ai didi

Postgresql IN 错误 : operator does not exist integer = integer[]

转载 作者:行者123 更新时间:2023-11-29 11:33:09 24 4
gpt4 key购买 nike

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}

为什么会出现这个错误?我在整数数组的一列中搜索一个整数。

最佳答案

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

根据 the documentation:

expression IN (value [, ...])

The right-hand side is a parenthesized list of scalar expressions.

例子:

where integerid in (1, 2, 5)

expression operator ANY (array expression)

The right-hand side is a parenthesized expression, which must yield an array value.

例子:

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

因为

skill_id_array in Postgres looks like this: {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[]

关于Postgresql IN 错误 : operator does not exist integer = integer[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com