首页 > 解决方案 > 错误:运算符不存在:bigint = bigint[]

问题描述

SQL 查询

SELECT type from types where id in (SELECT type_ids from user where id=1)  

这里是子查询

SELECT type_ids from user where id=1  

返回 bigint[] 类型的值。
我该如何解决这个问题?

标签: sqlpostgresql

解决方案


值列表数组值之间存在细微差别,您可以对它们使用的操作

运算符将IN一个值与一个值列表进行比较,例如返回多行的子查询。因此,它适用于类似SELECT type from types where id in (SELECT type_id from user)istype_id的情况bigint,但子查询返回了几行。

正如文档所说,id in (a, b, c)相当于id=a OR id=b OR id=c,这就是您收到错误的原因:Postgres 尝试计算id = (SELECT type_ids from user where id=1)但不知道如何将 abigint与 bigints ( ) 数组进行比较bigint[]

运算符将= ANY一个值与单个数组 value进行比较,这就是您在此处所拥有的:SELECT type_ids from user where id=1返回单行,但该行中的值是一个数组(一个bigint[]值)。

所以编写查询的一种方法是:

SELECT type from types where id = ANY (SELECT type_ids from user where id=1)  

推荐阅读