2017-10-16 21 views
1

私はMySQLで以下のテーブルを持っています。MySQLで予期しないNULLの比較がありません

city_data 
+------+-----------+-------------+ 
| id | city_code | city_name | 
+------+-----------+-------------+ 
| 4830 | BHR  | Bharatpur | 
| 4831 | KEP  | Nepalgunj | 
| 4833 | OHS  | Sohar  | 
| 4834 | NULL  | Shirdi  | 
+------+-----------+-------------+ 

以下のクエリ。

city_codeからのid、city_code、city_nameの選択city_code!= 'BHR';

私は3行を期待していました。

| 4831 | KEP  | Nepalgunj | 
| 4833 | OHS  | Sohar  | 
| 4834 | NULL  | Shirdi  | 
+------+-----------+-------------+ 

ただし、2行しか取得できません。

| 4831 | KEP  | Nepalgunj | 
| 4833 | OHS  | Sohar  | 
+------+-----------+-------------+ 

は私が行

| 4834 | NULL  | Shirdi  | 

はなく、私のクエリの結果に含まれる理由を理解することはできませんよ。 where条件(NULL!= 'BHR')が渡されているはずです。

疑問を解決するために、誰か助けてください。

+1

city_dataからのselect id、city_code、city_name where COALESCE(city_code、 ' - 1')!= 'BHR'; ' – lad2025

答えて

1

MySQL Reference Manual, section 3.3.4.6: Working with NULL valuesによると、以下である理由:

ので、任意の算術比較の結果NULLを指定した場合は NULLになりますので、そのような比較で意味のある結果を得ることはできません。

MySQLでは、0またはNULLはfalseを意味し、それ以外の場合はtrueを意味します。ブール演算から デフォルトの真理値は、これはNULL != 'BHR'は、今度はMySQLへfalseを意味するであろう、NULLに評価することを意味します。1.

です。クエリが必要に応じて機能するようにするには、クエリにOR city_code IS NULLを追加する必要があります。

+0

はい。 ** NULLとの算術比較の結果もNULLです。**はすべてを説明しています。 – shubham12511

0

あなたは、!=でnull値を比較し、それがnullであるため、代わりにIS NULL述語を使用することはできません。

select id,city_code,city_name 
from city_data 
where city_code != 'BHR' OR city_code IS NULL; 
+0

あなたはCOALESCEを使いたくありませんか?もっと早く! – Hogan

関連する問題