8
select 'true' from dual where 1 not in (null,1);

これを実行すると、何も結果が得られません

私の質問は何ですか:

上記のクエリは論理的に同等です

select 'true' from dual where 1 != null and 1 != 1;

上記のステートメントと同じように何も結果になりません

どうか明らかにしてください?

4

5 に答える 5

13

正しいです (ただしIN、これは句ではなく演算子であり、Oracle だけでなく SQL 全般でこのように機能することに注意してください)。

where 1 not in (null,1)

次と同等です。

where 1 != null and 1 != 1

実際には次のように書く必要があります:

WHERE 1 NOT IN (NULL, 1)

WHERE 1 <> NULL AND 1 <> 1

これは次と同じです:

WHERE (1 <> NULL) AND (1 <> 1)

これは次のように評価されます。

WHERE UNKNOWN AND FALSE

さらに次のように:

WHERE FALSE

したがって、行は正しく返されません。


があった場合、 (演習として残します) とWHERE 1 NOT IN (NULL, 2)評価され、行も返されないことに注意してください。WHERE UNKNOWN

于 2012-07-03T13:00:21.103 に答える
4

NULL 値との比較におけるスクリプトの問題。使用する必要があります

column is null and column = 1

実際には NULL は未定義の値です。NULL との比較では、True も False も返されず、NULL が返されます。NULL = NULLでも

そのため、1 not in (null,1)は機能しません。

于 2012-07-03T12:56:11.403 に答える
2

はい、そうです。

select something from table where column not in (1,2,3);

と同等です

select something from table where column != 1 and column != 2 and column != 3;
于 2012-07-03T12:51:44.103 に答える
1

IN ステートメントは OR ステートメントのコレクションですが、NOT IN は AND ステートメントのコレクションですが、等しくもありません。

したがって、NOT IN は次と同等です。

1 <> NULL
AND 1 <> 1
AND ...

IN は次のようになります。

1 = NULL
OR 1 = 1
OR ...

NULL の風変わりな性質のため、コレクションに NULL があると機能しないことに注意してください。

于 2012-07-03T12:52:48.707 に答える
0

はい。正しいです。また、NULL 値は IS NULL と比較する必要があります

于 2012-07-03T12:53:11.490 に答える