我有这个数据库查询:
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
答案 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
)