49

MySQL テーブルに CODE という列があり、NULL にすることができます。選択した結果セットで無視したい CODE='C' の行がいくつかあるとします。結果セットに CODE=NULL または CODE!='C' のいずれかを含めることができます。

次のクエリは、CODE が NULL の行を返しません。

SELECT * from TABLE where CODE!='C'

しかし、このクエリは期待どおりに機能し、それが正しい方法であることはわかっています。

SELECT * from TABLE where CODE IS NULL OR CODE!='C'

私の質問は、CODE!='C' だけで CODE=NULL の行が返されないのはなぜですか? 間違いなく「C」は NULL ではありません。ここでは、値を文字と比較していません。なぜそれがうまくいかないのか、誰かが光を当てることができますか?

4

7 に答える 7

59

MySQL では、NULL値がないのではなく、「欠落している不明な値」と見なされます。この MySQL Reference on NULL を見てください。

との算術比較NULLは true または false を返しませんが、NULL代わりに を返します。したがって、 true をNULL != 'C'返すNULLのではなく、 を返します。

「NULL」を使用した算術比較では、false が返されます。これを SQL で確認するには:

SELECT IF(NULL=123,'true','false') 

値を確認するには、 &演算子NULLを使用する必要があります。IS NULLIS NOT NULL

于 2012-03-07T20:37:26.503 に答える
17

SQL では、NULL 値は特別な値であり、他の値と比較することはできません。NULL との直接比較の結果は常に NULL ですが、(残念ながら) 一部の実装では FALSE が見つかる場合があります。

null 値をテストするには、 and を使用する必要がIS NULLありIS NOT NULLます。

于 2012-03-07T20:39:21.713 に答える
6
SELECT * 
FROM `table_name` 
WHERE IFNULL(`column_name` != 'C', TRUE)
于 2012-10-01T07:38:50.417 に答える
2
select * from user where application_id='1223333344' and name is null;
于 2017-01-17T09:17:01.880 に答える