2016-04-29 5 views
2

私は値がどこの範囲の範囲に存在する行を選択しようとしています。これまでのところ、私は、次の作業を行うことができました:SELECTここで値の範囲のコレクションの

SELECT * FROM table 
WHERE num <@ numrange(1,4) OR num <@ numrange(7,11) 

私は

SELECT * FROM table 
WHERE num <@ ANY(numrange(1,4), numrange(7,11)) 

作業のようなものを得ることができるだろう期待していたが、私はすべての運を持っていませんでしたそれと。

ORを連鎖させるよりも優れた解決策はありますか?

答えて

2

あなたはANY(...)式の値を配列にする必要がある...接近していた:

SELECT * FROM table 
WHERE num <@ ANY(ARRAY[numrange(1,4), numrange(7,11)]) 
+0

は完璧に動作します、ありがとう! – pgoggijr

+0

num列のインデックス作成に関するヒントもありますか? – pgoggijr

+0

'<@ '演算子はこれを難しくします。その場合、おそらく 'num BETWEEN 1 AND 3 OR ... 'というようにクエリを書くだけで、インデックスを使用しても問題はありません。 –