我不知道如何在测试用例中使用数组重写这个查询:
--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没有指明这是否可能。
注意:即使范围是可能的,我也不想要它们。
发布于 2013-07-18 02:31:55
下面将提取键'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;会产生意想不到的结果?
https://stackoverflow.com/questions/17707322
复制相似问题