2012年7月10日

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

井野です。

分解してみると確かに、目的の意図とは違ってました。

目的とするのは、
where
(A >= 300 and A <= 300)
or (B >= 300 and B <= 300)

or (C >= 300 and C <= 300)
です。

ANYで表現できればシンプルになりそうだったので。


2012年7月10日 15:55 Tomoaki Sato <sato@xxxxx>:
> 佐藤です。
>
>> 井野と申します。
>>
>> 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 では一行
> も取得できないので違うかな。


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




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