[pgsql-jp: 41141] Re: ANYを使用した問い合わせについて

Tomoaki Sato sato @ sraoss.co.jp
2012年 7月 10日 (火) 15:55:20 JST


佐藤です。

> 井野と申します。
> 
> SQLでの問い合わせについてお伺いしたいことがあります。
> 
> ※PostgreSQL 9.0.0
> select * from (
> select 100 as A ,200 AS B, 300 AS C  -- (1)
> union all
> select 201 as A ,301 AS B, 401 AS C  -- (2)
> ) t
> where 300 >= any(array[A,B,C])
>   and 300 <= any(array[A,B,C])
> 	
> 上記問い合わせで取得される結果は、(1)のみを期待したのですが、(2)も対
> 象となってしまいます。anyについては不等号は使用できないのでしょうか?

ANY は配列の各要素に演算子を適用して 1 つでも真であれば結果が真になり
ます。OR を使用して書き換えると以下のようになります。

  WHERE (300 >= a OR 300 >= b OR 300 >= c)
    AND (300 <= a OR 300 <= b OR 300 <= c)

従って、二行取得されるのは正しく、不等号も使用できています。

(1) のみが取得される条件が思いつかないのですが、どういった条件で取得し
ようとしているのでしょうか。

すべてが真の場合に結果を真にしたいなら ALL がありますが、ALL では一行
も取得できないので違うかな。


----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan



pgsql-jp メーリングリストの案内