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ではありません。ここでは、文字と値を比較していません。なぜそれがうまくいかないのか誰かが光を投げることはできますか?
MySQLでは、NULL
は、値がないのではなく、「欠損した不明な値」と見なされます。ご覧ください このMySQLリファレンスon NULL 。
NULL
との算術比較はtrueまたはfalseを返しませんが、代わりにNULL
を返します。したがって、NULL != 'C'
は、trueを返すのではなく、NULL
を返します。
「NULL」との算術比較はfalseを返します。 SQLでこれを確認するには:
SELECT IF(NULL=123,'true','false')
NULL
値を確認するには、IS NULL
およびIS NOT NULL
演算子を使用する必要があります。
私のテストとここにあるドキュメントに基づいて: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
<=>を使用して、nullを比較し、ブール結果を取得できます。
注:NOT EQ演算子のように見えますが、EQ演算子です
例えば:
select x <=> y;
or
select @x <=> @y;
これは、文字列とnull、文字列と文字列なども比較します。
SQLでは、NULL値は特別な値であり、他の値とは比較できません。 NULLとの直接比較の結果は常にNULLになりますが、(残念ながら)実装によってはFALSEが見つかる場合があります。
Null値をテストするには、IS NULL
およびIS NOT NULL
を使用する必要があります。
SELECT *
FROM `table_name`
WHERE IFNULL(`column_name` != 'C', TRUE)
application_id = '1223333344'で名前がnullのユーザーから*を選択します。