2017-09-05 14 views
1

私はこのようになりますテーブル内の単一の列を持っている:NULLカラムに対してWHERE句を使用すると、mySQL selectクエリで結果が返されません。

enter image description here

(フィールド3は、私はSQLクエリを実行するためにQTODBC7.0を使用NULLであり、このアプリケーションは、NULLフィールドがクエリに空白表示されます。むしろ、テキスト「NULL」を表示するよりも結果、)

次のように私は、単純なSQLクエリを持っている:

select * from table where field3 <> 'randomstring' 

私は、クエリがフィールド3には一致しないすべてのフィールドを返すことを期待'randomstring'の値です。

カラム 'field3'は 'randomstring'の値と等しくないため、クエリに返す必要があります。

奇妙なことが起こります:

上記のクエリは何も返しません!

enter image description here

FIELD3のでNULLに等しく、それゆえ、行は私のクエリに等しい返されるべき「randomstring」はありませんが、そうではありません。

私はいくつかのテストを行いましたが、これはfield3がNULLだがfield3が空の文字列(NULLでない)に等しい場合に発生することがわかりました。

field3にNULL値が含まれている可能性がある場合、select文を動作させるにはどうすればよいですか?

+0

使用 'COLUMN3がnull値をチェックするNULL'されるための条件がtrueに評価され

SELECT * FROM table WHERE field3 <> 'randomstring' or field3 IS NULL 

、このようなクエリで:したがって、あなたはjarlhによって提案されたソリューションを使用する必要があります。 – jarlh

+0

オプションは['<=>'](https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to)演算子に等しいNULL安全です。 – wchiquito

答えて

2

この現象はSQL標準の一部である3値ロジックによって発生します。つまり、すべての論理条件はtrue,falseまたはunknownと評価され、条件がtrueの場合にのみ行が返されます。方程式(またはその両方)の片側にNULL値がある場合、結果はunknownであると定義されています。あなたの場合、field3がNULLの場合、条件の結果はunknownです。 FIELD3の値がNULLである場合unknown or true = true

+0

すばらしい説明! – cleverpaul

関連する問題