我想在CTE一次創建一組ID,並在多個ANYs使用它的陣列。但我在第一個卡住了。使用PG 9.3使用從CTE的SELECT ... WHERE ...任何
WITH x AS (
SELECT ARRAY(SELECT * FROM generate_series(1, 10)) AS a
)
SELECT 1
WHERE 2 = ANY(SELECT a FROM x)
我期望的是在ANY中的SELECT語句將返回以前創建的數組。相反,我得到這個錯誤:
ERROR: operator does not exist: integer = integer[]
LINE 6: WHERE 2 = ANY(SELECT a FROM x)
我不明白是什麼問題,因爲select語句應該返回一個數組,任何需要數組。
我當然不會造成熱膨脹係數的陣列和在任何每次動態創建它,但我認爲這將是一次創造它少高性能。我必須有一個數組,因爲ANY沒有數組會改變查詢計劃(當我在我的實際表上做這件事,而不是這個小例子)時,會導致性能降低。
'ANY'返回數組,所有的權利。但是'2'確實是一個'integer []'還是一個簡單而簡單的'integer'? – waka
爲什麼你想爲此使用數組?簡單的子查詢是標準的SQL方法。 –
@GordonLinoff我上面說的,我得到一個標準的子查詢VS數組不同的查詢計劃,並且陣列計劃較好。 – eurotrash