を返さないのはなぜ私はテーブルを次ています
そして単純なクエリ次NOT IN(NULL)は常に何も
SELECT * FROM dbo.Calendars WHERE calname NOT IN(NULL)
私の質問は、なぜいつもNOT IN(NULL)は何も返さないされますか?
PSは:どんなにあなたがを追加する場合は、あなたのテーブルで何NOT IN(NULL)任意の列の条件に、結果は何もありません。 ありがとうございます。
を返さないのはなぜ私はテーブルを次ています
そして単純なクエリ次NOT IN(NULL)は常に何も
SELECT * FROM dbo.Calendars WHERE calname NOT IN(NULL)
私の質問は、なぜいつもNOT IN(NULL)は何も返さないされますか?
PSは:どんなにあなたがを追加する場合は、あなたのテーブルで何NOT IN(NULL)任意の列の条件に、結果は何もありません。 ありがとうございます。
:calname
のみ正の整数値を取ることができれば例えば、我々は代わりにこれを行うことができます。 チェックThis post on bad practices。 IN
とNULL
を使用しないでください。EXISTS
を使用して、何かが存在する行を少なくとも1つテストしてください。
NULL
ほとんどのデータベースでは、他の値とは扱いが異なります。例えば、この述語は真ではありません:
WHERE foo = NULL
foo
の値が実際にNULL
であれば、この述語が真であるのに対し:
WHERE foo IS NULL
あなたの問題のため、あなただけしたい場合calname
がヌルでないかどうかを確認するには、次の述語を使用します。
WHERE calname IS NOT NULL
一方、NULL
の値のセット([1,2,3,4、NULL]など)のうちの1つの値のセットがあり、まだNOT IN
の構文を使用する場合は、それこのような:
WHERE calname IS NOT NULL AND calname NOT IN(1, 2, 3, 4)
EDIT:あなたはNOT IN
構文はCOALESCE
にあなたは間違いなくそれに格納されていません知っている値に列calname
で使用するように制約されている場合は、これを行うためのさらなる方法カラム。 value equals NULL
が定義されていない、とTrueに評価されることはありませんので
WHERE COALESCE(calname, -1) NOT IN (-1)
クエリが評価されて、<> nullと評価され、結果はUNKNOWNになります。
これにクエリを変更し、
SELECT * FROM dbo.Calendars WHERE calname IS NOT NULL;
トライcalnameがnullでない – Sachu
は@Sachu .Thatがme.butのために働く私はNOT INの背後にあるシナリオを探していますと、なぜこれが動作しませんありがとうこのように –
Nullは未知の値であり、したがって、他のヌルを含め、すべての値も同様である。したがって、 'null = null'はfalseであり、' null <> null'もfalseです。 –