我经常使用integer = ANY(integer[])
语法,但现在ANY运算符不起作用。这是我第一次使用它来比较标量与从CTE返回的整数,但我认为这不应该导致问题。运算符在任何查询中都不存在: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
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)
详细信息。
那么我做错了什么?
附加说明:由于'1 = ANY(ARRAY [1,2,3])'是合法的,是合理的也期待'1 = ANY(SELECT ARRAY [1,2,3])'是合法的,但这不是因为那会造成你是否想要'1 = ARRAY [1,2,3]'或'1 = 1 OR 1 = 2或1 = 3',解析器不够聪明,只能确定一个是合法的。你可以告诉它,你真的想要1 = ANY((SELECT ARRAY [1,2,3]):: int [])'(我会这样做而不是'unnest')的数组 - 任何形式。 – 2014-09-01 08:09:22
啊,有趣。感谢您的额外细节。 – khampson 2014-09-01 08:11:01
@CraigRinger:谢谢!肯的回答帮助我如何正确地做,但你的评论让我明白为什么我的查询是错误的。 – 2014-09-01 08:25:24