Добавление column_name! = 3 возвращает намного меньше результатов - PullRequest
0 голосов
/ 07 июня 2011

У меня есть запрос к базе данных:

select      scheduled_hike_id 
        ,   hike_date 
        ,   hike_title 
        ,   hike_group_id 
        ,   hike_privacy 
        ,   hike_description 
        ,   DAYOFMONTH(hike_date) 
        ,   DAYNAME(hike_date) 
        ,   YEAR(hike_date) 
        ,   MONTH(hike_date) 
from        scheduled_hikes 
where       is_cancelled is null 
and         hike_date > DATE_ADD(NOW(), INTERVAL -1 DAY) 
and         show_on_home_page = 1  
order by    hike_date limit 4

Возвращает то, что я ожидал. Когда я добавляю предложение "and hike_privacy! = 3", он возвращает НАМНОГО меньше результатов.

Другие значения в столбце - NULL, 1, 2

Есть идеи, почему! = 3 не работает, как я ожидал? Кроме того, <3 дает такие же неожиданные результаты. Я использую MySQL </p>

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

попробуй and (hike_privacy IS NULL OR hike_privacy != 3)

0 голосов
/ 07 июня 2011

Если значение hike_privacy равно null, оно не будет соответствовать hike_privacy != 3.

Попробуйте: and (hike_privacy != 3 or hike_privacy is null)

Нулевые значения никогда не совпадают со сравнениями, отличными от «нулевого стиля».

Примечание: Убедитесь, что вы используете квадратные скобки вокруг своих условий "ИЛИ"!В SQL OR имеет приоритет, поэтому без скобок он будет анализироваться так, как если бы он был закодирован следующим образом (обратите внимание на положение скобок):

where   (       is_cancelled is null 
            and hike_date > DATE_ADD(NOW(), INTERVAL -1 DAY) 
            and show_on_home_page = 1 
            and hike_privacy != 3
        ) 
or      hike_privacy is null

, что весьма отличается от того, что мы хотим,:

where       is_cancelled is null 
        and hike_date > DATE_ADD(NOW(), INTERVAL -1 DAY) 
        and show_on_home_page = 1 
        and (       
                    hike_privacy != 3 
                or hike_privacy is null
            )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...