2015-10-28 7 views
1

У меня есть таблица с столбцом device, которая может быть «P», «T» или «NULL», но состояние, подобное device NOT IN('P', 'T'), похоже, пропустит строки с NULL. Может быть продемонстрировано со следующими запросамиBigQuery COUNT (*) ... WHERE NOT (...) возвращает запутывающие результаты

$ bq query 'SELECT count(*) FROM t' 
+----------+ 
| f0_ | 
+----------+ 
| 29542063 | 
+----------+ 
$ bq query "SELECT count(*) FROM t WHERE device = 'P' OR device = 'T'" 
+---------+ 
| f0_ | 
+---------+ 
| 8268436 | 
+---------+ 
$ bq query "SELECT count(*) FROM t WHERE NOT (device = 'P' OR device = 'T')" 
+-----+ 
| f0_ | 
+-----+ 
| 0 | 
+-----+ 
$ bq query "SELECT count(*) FROM t WHERE device IS NULL" 
+----------+ 
| f0_ | 
+----------+ 
| 21273627 | 
+----------+ 

Почему запрос с WHERE NOT возвращается 0 в то время как IS NULL один возвращает правильный результат?

ответ

3

«Почему запрос с WHERE NOT возвращает 0, а NULL возвращает правильный результат?»

Поскольку

SELECT null != 'anything' 

возвращает 'нулевой', а не 'ложь'.

Смежные вопросы