2005/07/15

3値論理

SQLで条件式を書いても思ったとおり動かない。おかしいと思って、デバッグしていたら、3値論理のせいだった。SQLを勉強したのずいぶん昔なので、忘れていた。。
3値論理とは、論理計算において、TRUEとFALSEのほかに、UNKNOWN(未知)という状態がある論理のことだ。さらにNot Applicable(適用不能)も含めた4値論理という考え方もあるようですが、ここでは考えない。
つまりTRUEなのか、FALSEなのかわからない状態のことをUNKNOWNといっている。そのためUNKNOWN同士の論理演算とNOT UNKNOWNはUNKNOWNになる。また、UNKNOWNとのANDは、FALSEに対するものは必ずFALSEだが、それ以外はUNKNOWNになる。まとめると、





xNOT x
TRUEFALSE
UNKNOWNUNKNOWN
FALSETRUE





ANDTRUEUNKNOWNFALSE
TRUETRUEUNKNOWNFALSE
UNKNOWNUNKNOWNUNKNOWNFALSE
FALSEFALSEFALSEFALSE






ORTRUEUNKNOWNFALSE
TRUETRUETRUETRUE
UNKNOWNTRUEUNKNOWNUNKNOWN
FALSETRUEUNKNOWNFALSE

となる。
ちなみに、NULLとUNKNOWNはSQL的には同じもの。ここがわかっていないと、NULLが絡んできた瞬間に、論理がわからなくなる。
誰だ、こんなこと考え付いたのは。。

0 件のコメント:

コメントを投稿