- - PR -
SELECT文の複合条件?設定の方法について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-26 11:50
SQLServerを使用しております。
二つの条件を組み合わせたもの以外のデータを取得したいのですが、 どうもうまくいきません。 普通にWHERE句の後に条件書き込むだけで可能でしょうか? 例 SELECT column_A, column_B, column_C 条件は、column_Aが0以外かつcolumn_Aが1でcolumn_Bが0以外のもの。 大きく分けて二つの条件ですが、別々に記述すると下記のようになると思います。 column_A <> 0 column_A = 1 AND column_B <> 0 これを素直に AND で連結すると column_A = 1 AND column_B <> 0 のものしか表示されません。 かといって OR で連結すると column_A <> 0 のものが表示され、column_A = 1 で column_B = 0 の値まで取得されてしまいます。 | ||||||||
|
投稿日時: 2005-01-26 12:00
が、条件なのであれば、
の結果は正しいものだと思います。 ( column_A <> 0 ) OR (column_A = 1 AND column_B <> 0 ) とやりたいのでしょうか? この場合は、「かつ」ではなくて「または」ですよ。 ちなみに、上記の条件は、正しく動作するかどうかは確認してません。 | ||||||||
|
投稿日時: 2005-01-26 12:12
>Edossonさん
ご指摘ありがとうございます。 AND や OR で二つの条件を連結したのは無知な私の行動です。 ( column_A <> 0 ) AND ( column_A = 1 AND column_B <> 0 ) や ( column_A <> 0 ) OR (column_A = 1 AND column_B <> 0 ) の結果が正しいものなのは私も把握しております。 私がお聞きしたいことはといいますと、 「column_Aが0以外かつcolumn_Aが1でcolumn_Bが0以外のもの」 を取得する方法を教えて頂けないでしょうか?と言うことです。 説明が下手で申し訳ございません。 例 A B C | 0 | 0 | 0 | | 0 | 1 | 1 | | 1 | 0 | 0 | | 1 | 1 | 0 | | 1 | 2 | 1 | | 2 | 0 | 0 | と言うデータがあった場合、 A B C | 1 | 1 | 0 | | 1 | 2 | 1 | | 2 | 0 | 0 | の三件を取得したいのです。 | ||||||||
|
投稿日時: 2005-01-26 12:28
言っておられることをそのまま普通に解釈すると、 column_A <> 0 AND column_A = 1 AND column_B <> 0 つまり column_A <> 0 AND column_B <> 0 となってしまいます。 でも、きっとそういうことではないですよね。 もう少し、説明されたほうがよいように思います。 例も記述されているようですが、列 C については本文中で一切触れられていませんし。 | ||||||||
|
投稿日時: 2005-01-26 12:48
永井です。 例から推察するに column_A <> 0 AND NOT(column_A = 1 AND column_B = 0) というイメージでしょうか? #文章に合わせて書いてみました #今SQL実行出来る環境にないので、これが通るかどうか分からないですが。 ##自分でこういうイメージのSQLを書くときは後半括弧内部分の対偶を使うので、 ##NOTって使ったことない…… [ メッセージ編集済み 編集者: 永井和彦 編集日時 2005-01-26 12:52 ] | ||||||||
|
投稿日時: 2005-01-26 12:59
返信作成中に永井さんの投稿に気がつきまして・・・。
「((column_Aが0)以外)または((column_Aが1)かつ(column_Bが0以外))」 と思っていましたが、 「(「column_Aが0」以外) または(((column_Aが1)かつ(column_Bが0))以外)」 でありましたか。 だとしたら・・・。 いろいろと文章をひねってみましたが、素の日本語での表現は確かに難しいですね。 追記: 私の解釈もおかしいようで・・・(汗 スレ汚しで申し訳ありません。m(_ _;m [ メッセージ編集済み 編集者: Edosson 編集日時 2005-01-26 13:38 ] | ||||||||
|
投稿日時: 2005-01-26 13:19
この手の表現は、うまく表現しないと、正しく伝わりませんよね。
「column_Aが0以外かつcolumn_Aが1でcolumn_Bが0以外のもの」 これを、普通に解釈すると、あんとれさんがおっしゃる通り、 column_A <> 0 AND column_A = 1 AND column_B <> 0 となると思います。 でも、例から判断すると、次のように表現されるのではないでしょうか。 column_Aが0以外のもの 但し、column_Aが1の時は、column_Bが0以外のもの このように表現すれば、もっと正しく伝わると思います。 | ||||||||
|
投稿日時: 2005-01-26 13:32
今日は。
で試しにtest(data1 number(3),data2 number(3),data3 number(3))で テーブルを作って、oracle(9.2.0.6)で実験してみました。 以下の様に書くとお望みの物が取得できます。 (要は副問い合わせを使って一旦条件を絞り込みます) select * from (select * from test where data1 <> 0 ) where data2 <> 0 or data1 >1 副問い合わせでdata1が0でない物を切り出し、そのデータに対し、data2が0でない と言う事で 1,1,0と1,2,1が切り出され、 data1>1によって1.0.0が除外されます。 つまり select * from test where data1 <> 0 で 1,0,0 1,1,0 1,2,1 2,0,0 が切り出され、 それに対しwhere句の data2 <> 0 で 1,1,0 1,2,1 data1 >1 で 2,0,0 が選択されます。 これで良いかな? [ メッセージ編集済み 編集者: NAO 編集日時 2005-01-26 13:37 ] |