2012年7月10日

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

佐藤です。

> 井野と申します。
>
> 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@xxxxx>
SRA OSS, Inc. Japan


投稿者 xml-rpc : 2012年7月10日 15:55
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/110057
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。