sql – 操作符不存在:整数=整数[]在一个查询与任何

我经常使用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);

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

ERROR: operator does not exist: 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的细节.

那我做错了什么?

解决方法

基于错误消息部分运算符不存在:integer = integer [],似乎需要不需要bs列,以便将右侧返回到整数,以便可以找到比较运算符:
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文件

The right-hand side is a parenthesized subquery,which must return
exactly one column. The left-hand expression is evaluated and compared
to each row of the subquery result using the given operator,which
must yield a Boolean result. The result of ANY is “true” if any true
result is obtained. The result is “false” if no true result is found
(including the case where the subquery returns no rows).

…这个错误是有道理的,因为左边的表达式是一个整数 – 列b – 而右边的表达式是一个整数数组,或者是整数[],所以比较结果是形式integer = integer [],它不具有运算符,因此导致错误.

不察觉整数[]值使得左和右手表达式成为整数,因此比较可以继续.

修改SQL Fiddle.

注意:使用IN而不是= ANY时会看到相同的行为.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...