3

これらの2つのステートメントが間違っている理由を理解しています

NULL LIKE 'X'
NULL NOT LIKE 'X'

しかし、私が理解していないのは、これらがなぜであるかです:

NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')

たとえば、これら2つのステートメントは、異なる値を返す必要があると思います。

SELECT CASE WHEN NOT (NULL LIKE 'X') THEN 'True' ELSE 'False' END
SELECT CASE WHEN     (NULL LIKE 'X') THEN 'True' ELSE 'False' END
4

3 に答える 3

7

SQLは3値論理を使用します。あなたはこれらがすべて間違っていると言います:

NULL LIKE 'X'
NULL NOT LIKE 'X'
NOT (NULL LIKE 'X')
NOT (NULL NOT LIKE 'X')

しかし、それは実際には真実ではありません。それらはすべてnullであり、これはtrueでもfalseでもありません。

WHENor句は、true以外のWHERE値を拒否します。これは、null値とfalse値を意味するため、nullはfalseと同じように見えるかもしれませんが、お気づきのとおり、そうではありません。:-)

于 2012-08-23T19:47:23.127 に答える
2

NULLは常に未定義です。

したがって、

not (NULL like X) is undefined

そしてまた

not (NULL not like X) is undefined

Undefinedの最適な近似値はNULLであるため、両方のステートメントがNULLと評価されます(NOT、ご存知のとおり、NULLに等しい、それらが何に等しいかはわかりません)

于 2012-08-23T19:49:22.533 に答える
2

NULLいつもNULLそのようなものと比較することはできません。それはあなたが答えとして探しているものである真または偽であってはなりません。

比較できないのと同じように、NULLは不明な値であるため、これは常にゼロ行を返します。

SELECT *
FROM yourTable 
WHERE yourCol = NULL
于 2012-08-23T19:48:27.707 に答える