2012-04-05 6 views
2

У меня есть простая таблица на моем локальном сервере.MySQL: функция «NOT IN()» не разрешает значения «NULL» в наборе результатов?

mysql> desc table ; 
+-------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+---------+------+-----+---------+-------+ 
| id | int(10) | YES |  | NULL |  | 
| count | int(10) | YES |  | NULL |  | 
+-------+---------+------+-----+---------+-------+ 
2 rows in set (0.00 sec 

В нем всего три записи.

mysql> select * from uday ; 
+------+-------+ 
| id | count | 
+------+-------+ 
| 1 |  1 | 
| 2 |  2 | 
| 3 |  0 | 
| 4 | NULL | 
+------+-------+ 
4 rows in set (0.00 sec) 

Теперь почему я не вижу четвертую колонку в приведенном ниже результате.?

mysql> select * from uday where count NOT IN (0) ; 
mysql> select * from uday where count != 0 ; 
+------+-------+ 
| id | count | 
+------+-------+ 
| 1 |  1 | 
| 2 |  2 | 
+------+-------+ 
2 rows in set (0.00 sec) 

как насчет 4-й записи ...? Его не видно в результате. NULL не 0 ПРАВИЛЬНО ...?

, пожалуйста, игнорируйте, если он выглядит довольно глупо, поскольку я даже не конкурирую в части кодирования.

ответ

3
col1 not in (1,2,null) 

представляет собой сокращенную:

col1 <> 1 and col1 <> 2 and col1 <> null 

В three-valued logic, col1 <> null возвращает SQL, unknown. И true and true and unknown также возвращает unknown. Поскольку where принимает только true, а не unknown, строка с null отфильтрована из набора результатов.

+0

Его ясный Andomar. чемq для быстрого ответа. -Uday – Uday