0

テスト ケースの配列を使用してこのクエリを書き直す方法がわかりません。

--explain
SELECT  COUNT(id)
FROM    (
    SELECT  T.id
    FROM    product2 AS T
    WHERE   (ext @> 'p01=>1' OR ext @> 'p01=>2')
    AND (ext @> 'p02=>1' OR ext @> 'p02=>2' OR ext @> 'p02=>3')
    AND (ext @> 'p03=>2' OR ext @> 'p03=>3' OR ext @> 'p03=>4' OR ext @> 'p03=>5' OR ext @> 'p03=>6')
) T

のようなものを探していext @> 'p01=[1,2]'ます。ドキュメントには、これが可能かどうかは示されていません。

注:範囲が可能だったとしても、私はそれらを望んでいません。

4

1 に答える 1

1

以下は、キー 'p01' の値を抽出し、配列内に一致するものが見つかった場合に TRUE を返します。それはあなたが求めているものですか?

SELECT ('p01=>1,p01=>2,p02=>1,p02=>3,p02=>5'::hstore -> 'p01')::INTEGER = ANY(ARRAY[1,2,3,4,5])

元のクエリのように変更されました

SELECT count(*)
FROM    (
        SELECT t2.id
        FROM product2 t2
        WHERE (ext::HSTORE -> 'p01')::INTEGER = ANY(ARRAY[1,2])
        AND (ext::HSTORE -> 'p02')::INTEGER = ANY(ARRAY[1,2,3])
        AND (ext::HSTORE -> 'p03')::INTEGER = ANY(ARRAY[2,3,4,5,6])
        ) t;

それは予期しない結果をもたらしますか?

于 2013-07-17T18:31:55.017 に答える