1

私はこれらの演算子で何が間違っているのか疑問に思っています。

私は最終的に、p.TESTまたはp.DLのいずれかが欠落しているが、同じ人物の両方が欠落している人物のリストを取得しようとしています。

 select ....
  from ....

    WHERE

 ((p.TEST is null OR p.DL is null) OR
 (p.TEST = 0 or p.DL = 0) OR
 (p.TEST = 1 or p.DL = 0) OR
 (p.TEST = 0 or p.DL = 1))
4

3 に答える 3

1

しかし、同じ人の両方ではありません。

これはあなたの声明では保証されていません。

 ((p.TEST is null OR p.DL is null) OR  // if both are null this is true
 (p.TEST = 0 or p.DL = 0) OR           // if both are zero this is true
 (p.TEST = 1 or p.DL = 0) OR
 (p.TEST = 0 or p.DL = 1))

次のように明示的に確認する必要があります。

((a is null) and (b is not null)) OR
((b is null) and (a is not null))
// etc. for zero values:
((a = 0) and (b  <> 0)) OR
((b = 0) and (a <> 0))
//...

それでも、次のような結果が得られますが、これらもフィルタリングする必要a = 0b = nullある場合があります。

于 2013-03-25T14:58:56.707 に答える
1
select ..
from ..
where 
    -- one missing 
    (isnull(p.test,0) = 0 or isnull(p.dl,0) = 0
    and 
    -- but not both
    not (isnull(p.test,0) = 0 and isnull(p.dl,0) = 0)
于 2013-03-25T15:00:07.750 に答える
0

私はそれがすべきだと思います

 ( 
   (p.TEST is null AND p.DL is not null) OR 
   (p.TEST is not null AND p.DL is null)
 )

...等々

これは、1つが存在し、もう1つが欠落していることを知りたいためです。

于 2013-03-25T14:59:22.930 に答える