2013-06-24 4 views
-2

Я сам отвечаю во имя потомства. Вопрос заключался в том, почему этот SQLite запрос не делать то, что я ожидал:SQLite не обрабатывает || например OR

SELECT is_current FROM sp_table WHERE is_current != 1 || is_current IS NULL; 

Он выбирает только строки, где is_current является NULL! Ба.

+2

Не могли бы вы по крайней мере дать ваш вопрос хорошее название, чтобы другие могли найти его? – PeeHaa

+1

Также не только в sqlite, где '||' не делает то, что вы считали ... – PeeHaa

ответ

0

Проблема в SQLite || оператор не является логическим или! Это оператор конкатенации строк.

OR - правильный оператор.

Также, || имеет более высокий приоритет, чем все другие операторы SQLite, поэтому мои выражения даже не оценивались в том порядке, в котором я думал.

Правильное выражение:

SELECT is_current FROM sp_table WHERE is_current != 1 OR is_current IS NULL; 

Наконец, стоит отметить, что вы не можете заменить это выражение с: SELECT is_current FROM sp_table WHERE is_current != 1, потому что в SQLite NULL != 1 оценивает ложь. Вы должны явно проверить: is_current IS NULL.

SQLite reference

+0

Во многих случаях, когда возможно «NULL», функция [ifnull] (http: //www.sqlite. org/lang_corefunc.html # ifnull) очень полезно. –

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

  • Нет связанных вопросов^_^