我经常使用integer = ANY(integer[])语法,但现在任何操作符都不起作用.这是我第一次使用它来比较标量和从CTE返回的整数,但我认为这不会导致问题.

我的问题是:

WITH bar AS (
  SELECT array_agg(b) AS bs
  FROM foo
  WHERE c < 3
)
SELECT a FROM foo WHERE b = ANY ( SELECT bs FROM bar);

当我运行它时,它会抛出以下错误:

错误:运算符不存在:整型=整型[]:带条形(

详情请参阅本SQL Fiddle页.

那么我做错了什么?

推荐答案

基于错误消息部分operator does not exist: integer = integer[],似乎需要unnestd bs列,以便将右侧返回到integer,以便可以找到比较运算符:

WITH bar AS (
  SELECT array_agg(b) AS bs
  FROM foo
  WHERE c < 3
)
SELECT a
FROM foo
WHERE b = ANY ( SELECT unnest(bs) FROM bar);

这将导致输出:

A
2
3

鉴于ANY function人的文件:

右边是一个带括号的子查询,它必须返回

... 这个错误是有意义的,因为左边的表达式是一个integer——第b列——而右边的表达式是一个integerinteger[]的数组,所以比较结果的形式是integer=integer[],没有运算符,因此会产生错误.

unnest如果将integer[]值设为unnest,则左侧和右侧表达式将变为integers,因此可以继续进行比较.

修改SQL Fiddle.

Note:当使用IN而不是= ANY时,同样的行为也会出现.

Postgresql相关问答推荐

优化PostgreSQL查询以将用户插入数据库

如何诊断字符编码问题

列不明确

如何在PostgreSQL中更改分区的表空间?

将CSV文件复制到临时表

我应该如何更新热门表?

PL/pgSQL 中 PL/SQL %ISOPEN 的类似功能是什么?

Postgres 14 反斜杠 Z 没有给出正确的输出

如何计算过滤器中的百分比

Spring:如何在 PostgreSQL 中使用 KeyHolder

PostgreSQL - 改变数字的精度?

!= 和 <> 运算符有什么区别?

PostgreSQL ,从 2 个表中 Select ,但仅从表 2 中 Select 最新的元素

并发刷新materialized视图

sql语句错误:column .. does not exist

Postgis 中 2 点之间的距离,单位为 4326 米

带有 WITH 子句的查询时出现 Postgresmissing FROM-clause entry错误

在 postgresql 中对使用 array_agg 创建的文本聚合进行排序

如何在 postgres 查询中排名

重命名 Amazon RDS 主用户名