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 回答