添加column_name!= 3会返回更少的结果

时间:2011-06-07 01:23:07

标签: mysql sql database

我有这个数据库查询:

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

它返回我的预期。当我添加一个子句“和hike_privacy!= 3”时,它会返回很少的结果。

列中的其他值为NULL,1,2

为什么!= 3没有按预期工作的任何想法?而且,< 3给出了类似的意外结果。我正在使用MySQL

2 个答案:

答案 0 :(得分:3)

尝试and (hike_privacy IS NULL OR hike_privacy != 3)

答案 1 :(得分:0)

如果hike_privacy为null,则与hike_privacy != 3不匹配。

尝试:and (hike_privacy != 3 or hike_privacy is null)

Nulls永远不会匹配非“null style”比较。

注意:请确保在“OR”条款周围使用括号!在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
            )