根据错误消息部分
operator does not exist: integer =integer[],似乎需要对该
bs列进行
unnest编辑,以便使右侧回到,
integer从而可以找到比较运算符:
WITH bar AS ( SELECt array_agg(b) AS bs FROM foo WHERe c < 3)SELECt aFROM fooWHERe b = ANY ( SELECt unnest(bs) FROM bar);
结果为输出:
A23
给定ANY函数的文档:
右侧是带括号的子查询,该查询必须恰好返回一列。使用给定的运算符,将评估左侧表达式并将其与子查询结果的每一行进行比较,该运算符必须产生布尔结果。如果获得任何真实结果,则ANY的结果为“
true”。如果找不到正确的结果,则结果为“ false”(包括子查询不返回任何行的情况)。
…该错误是有道理的,因为左侧表达式是
integer-列
b-而右侧表达式是
integers或or的数组
integer[],因此比较最终以
integer=的形式结束
integer[],
t具有运算符,因此会导致错误。
unnest将该
integer[]值设为左手表达式
integer和右手表达式,因此可以继续进行比较。
修改后的SQL Fiddle。
注意: 使用
IN代替时会看到相同的行为
= ANY。


![运算符不存在:使用ANY的查询中的integer = integer [] 运算符不存在:使用ANY的查询中的integer = integer []](http://www.mshxw.com/aiimages/31/431617.png)
