首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >错误:运算符不存在: bigint = bigint[]

错误:运算符不存在: bigint = bigint[]
EN

Stack Overflow用户
提问于 2021-01-10 13:23:30
回答 2查看 521关注 0票数 0

SQL查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT type from types where id in (SELECT type_ids from user where id=1)  

这里的子查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT type_ids from user where id=1  

返回bigint[]类型的值。

我该如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2021-01-10 13:31:02

如果我理解正确,您可以使用exists

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select t.type
from types t
where exists (select 1
              from user u
              where u.id = 1 and
                    t.id = any (u.type_ids)
             );

或者,更简单地说,join应该做您想做的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select t.type
from types t join
     users u
     on t.id = any(u.type_ids)
where u.id = 1;

尽管如果type_ids有重复项,这可能会返回重复项。

票数 0
EN

Stack Overflow用户

发布于 2021-01-10 13:35:04

值列表、数组值和the operations you can use for each之间有细微的区别。

IN运算符将值与值列表进行比较,例如返回多行的子查询。因此,如果SELECT type from types where id in (SELECT type_id from user) is type_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),但不知道如何将bigint与bigints数组(bigint[])进行比较。

相反,= ANY运算符将一个值与单个数组值进行比较,这里就是这样:SELECT type_ids from user where id=1返回单行,但该行中的值是一个数组( bigint[]值)。

因此,编写查询的一种方法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT type from types where id = ANY (SELECT type_ids from user where id=1)  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65653749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文