- PR -

全件取得とWHERE指定のSQLを1つのDataAdapterで完結したい

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-11 13:12
引用:

NAL-6295さんの書き込み (2004-06-10 17:48) より:

sqlDA.SelectCommand.CommandText= "SELECT USERID,USERNAME FROM MASTER WHERE @USERID IS NULL OR (USERID = @USERID)"


 たしか、データベースではtrue/falseの2値ではなく、true/false/unknown(「不明」の意)の3値だったと思います。

 で、この判断文にNULLを入れると、

null IS NULL OR (USERID = null) → TRUE OR unknown → unknown → 結果不定

と、なるんじゃないかなぁ・・・っと。



 なお、私のは「RDB研究館」で教えて頂いた方法です。また、この方法ですと、USERIDがPrimary Key宣言されていると思いますが、せっかくのインデックスが使用されません。式を使用しているのでインデックスが使用できません。インデックスを使いたい場合は、文を分けるしかありません。

[ メッセージ編集済み 編集者: Jitta 編集日時 2004-06-11 13:19 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-06-11 14:44
NAL-6295です。
引用:

Jittaさんの書き込み (2004-06-11 13:12) より:
引用:

NAL-6295さんの書き込み (2004-06-10 17:48) より:

sqlDA.SelectCommand.CommandText= "SELECT USERID,USERNAME FROM MASTER WHERE @USERID IS NULL OR (USERID = @USERID)"


 たしか、データベースではtrue/falseの2値ではなく、true/false/unknown(「不明」の意)の3値だったと思います。

 で、この判断文にNULLを入れると、

null IS NULL OR (USERID = null) → TRUE OR unknown → unknown → 結果不定

と、なるんじゃないかなぁ・・・っと。




@USERIDがNULLの時
例えば、USERID = nullが、unknownだったとしても、
null IS NULLの方でTRUEが成立しますので、結果TRUEになり、全件取得します。
@USERIDがNULLで無い時、
@USER IS NULLはFALSEとなり、(USERID = @USERID)で成立したレコードのみ取得します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-06-11 15:14
引用:

NAL-6295さんの書き込み (2004-06-11 14:44) より:


 すみません、「TRUE OR UNKNOWNはTRUE」ということに対しての疑問でした。FALSE OR UNKNOWNはUNKNOWNなので、「UNKNOWNでは?」と思った次第です。

 『Oracle9i SQLリファレンス』を確認したところ、TRUE OR UNKNOWNはTRUEでした。紛らわしい。。。(念のため、Books onlineで、SQL Serverの動きを確かめておくことをお勧めします>だいまるさん)

スキルアップ/キャリアアップ(JOB@IT)