でCTEの配列を使用するCTEでIDの配列を1度作成し、複数のANYで使用したいとします。しかし、私は最初のもので立ち往生している。 PGの使用930SELECT ... WHERE ... ANY
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 は配列がかかるため、問題が何であるかを理解していません。
もちろん、CTEで配列を作成し、それをいつでもANYで作成することはできませんが、一度作成するよりパフォーマンスが低いと想定します。配列を持たないANYではクエリプラン(この小さな例ではなく実際のテーブルでこれを行うとき)がパフォーマンスの低いものに変わるため、配列が必要です。
を使用したい場合は、 'ANY'はすべて、右の配列を返す場合。しかし、 '2'は本当に' 'integer []'か、単純で単純な '' integer''ですか? – waka
なぜこのための配列を使いたいのですか?単純なサブクエリは、標準のSQLメソッドです。 –
@ GordonLinoff私は上記のとおり、私は標準的なサブクエリと配列との別のクエリプランを取得し、配列計画が優れています。 – eurotrash