首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL HSTORE GIN查询

PostgreSQL HSTORE GIN查询
EN

Stack Overflow用户
提问于 2013-07-18 02:21:28
回答 1查看 128关注 0票数 0

我不知道如何在测试用例中使用数组重写这个查询:

代码语言:javascript
复制
--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]'这样的东西。documentation没有指明这是否可能。

注意:即使范围是可能的,我也不想要它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-18 02:31:55

下面将提取键'p01‘的值,如果在数组中找到任何匹配项,则返回TRUE。这就是你要找的吗?

代码语言:javascript
复制
SELECT ('p01=>1,p01=>2,p02=>1,p02=>3,p02=>5'::hstore -> 'p01')::INTEGER = ANY(ARRAY[1,2,3,4,5])

修改后的查询看起来与原始查询相似

代码语言:javascript
复制
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;

会产生意想不到的结果?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17707322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档