我經常使用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