2017-10-16 1 views
1

다음 표는 MySQL에 있습니다.MySQL에서 예기치 않은 NULL 비교가 없습니다.

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

및 그 이하의 쿼리.

select city, city_code, city_name from city_data 여기서 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 여기서 COALESCE (city_code, '- 1')! = 'BHR'; ' – lad2025

답변

1

MySQL Reference Manual, section 3.3.4.6: Working with NULL values에 따르면 다음은 이유 :

때문에 산술 비교 결과 NULL도 NULL 인 경우 이러한 비교에서 의미있는 결과를 얻을 수 없습니다.

MySQL에서 0 또는 NULL은 거짓을 의미하고 다른 모든 것은 참을 의미합니다. 부울 연산에서 기본 진리 값은이 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

관련 문제