当前位置: 首页 > 面试题库 >

运算符不存在:使用ANY的查询中的integer = integer []

柯轶
2023-03-14
问题内容

我经常使用integer = ANY(integer[])语法,但是现在ANY运算符不起作用。这是我第一次使用它来比较标量和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);

当我运行它时,它引发以下错误:

错误:运算符不存在:integer = integer []: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[],似乎需要对该bs列进行unnest编辑,以便使右侧回到,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函数的文档:

右侧是带括号的子查询,该查询必须恰好返回一列。使用给定的运算符,将评估左侧表达式并将其与子查询结果的每一行进行比较,该运算符必须产生布尔结果。如果获得任何真实结果,则ANY的结果为“
true”。如果找不到正确的结果,则结果为“ false”(包括子查询不返回任何行的情况)。

…该错误是有道理的,因为左侧表达式是integer-列b-而右侧表达式是integers或or的数组integer[],因此比较最终以integer=的形式结束integer[]
t具有运算符,因此会导致错误。

unnest将该integer[]值设为左手表达式integer和右手表达式,因此可以继续进行比较。

修改后的SQL Fiddle。

注意: 使用IN代替时会看到相同的行为= ANY



 类似资料:
  • 执行简单查询时出现操作符不匹配错误。这是什么原因造成的? 表定义:

  • 我有如下代码: 这是我的请求 我的party模型实体也使用了@id和变量Integer,我的问题是为什么会出现这样的错误?

  • 问题内容: 我正在阅读有关ANY和ALL运算符的oracle文档。除了一件事,我非常了解它们的用途。它指出: 全部 : 如果子查询返回零行,则条件的计算结果为TRUE。 任何 : 如果子查询返回零行,则条件的计算结果为FALSE。 在我看来,这不是很合逻辑。为什么在一个空子查询上的ALL将返回TRUE,而ANY返回FALSE? 我是SQL的新手,所以我认为它会有一个用例来说明这种行为,这对我来说确

  • 问题是我得到错误(过滤器表达式只能包含非主键属性:主键属性:名称)。租户是我的主分区键,名称是我的主排序键。 我需要在dynamo db中编写与此等效的内容:从项目中选择*,其中tenant='testProject',name in('John','Dave')。

  • 主要内容:Oracle ANY运算符简介,Oracle ANY运算符的例子在本教程中,您将学习如何使用Oracle 运算符将值与列表或子查询进行比较。 Oracle ANY运算符简介 Oracle 运算符用于将值与子查询返回的值或结果集列表进行比较。下面举例说明运算符与列表或子查询一起使用时的语法: 在这个语法中: 运算符前面必须有一个运算符,例如:,,,,,。 列表或子查询必须用圆括号包围。 使用运算符将值与列表进行比较时,Oracle将初始条件扩展到列表的所有元素,

  • 问题内容: 如何在基于URI的查询中指定AND操作?我正在寻找类似的东西: 问题答案: 根据文档,它应该按您描述的那样工作。参见http://www.elasticsearch.org/guide/reference/query- dsl/query-string- query.html 也就是说,您还可以使用以下内容: