この SQL ステートメントが を返すのはなぜ0
ですか?
SELECT CASE WHEN NULL IN (9,1,NULL) THEN 1 ELSE 0 END
一部の RDBMS には処理方法が設定されているため、使用している RDBMS はわかりませんNULL
。
NULL IN (9, 1, NULL)
次のように書くことができます
(NULL = 9) OR (NULL = 1) OR (NULL = NULL)
そしてそれらのどれTRUE
でもありませんでしたFALSE
。それらはすべてNULL
です。ステートメントには 2 つのパスしかないため、ブロックCASE
に該当しELSE
ます。
Null は定義されていないことを意味します。
NUll オブジェクトは他の NULL と等しくありません
NULL==1 は false を返します
NUll==2 は false を返します
NULL==NULL も false を返す
NULL
特定のサーバーでの処理方法によって異なります。
たとえば、SQL SERVER では、ANSI_NULLS をオフに設定して 1 を返すことができます。
SET ANSI_NULLS OFF
SELECT CASE WHEN NULL IN (9,1,NULL) THEN 1 ELSE 0 END
詳細については、の備考セクションをお読みください。SET ANSI_NULLS