您的位置:首页 > 数据库 > MySQL

mysql同时用and和or关联查询条件,并且值包含null所遇到的坑

2018-03-09 16:50 621 查看
今天写sql的时候,发现当某个字段的值为‘0’,‘1’,或者数据库默认的null的时候,用“!=”查询,结果集中是不包含null的
假如你这样写SELECT
*
FROM
common_message
WHERE
message_category = 'READ'
AND message_status != '0' 查询出来的结果集是这样的:



然后我想,既然他缺少包含null的,我在用or拼接一下不就大功告成了嘛,遂把sql改成了这样,发现结果集还是不行,真是崩溃。
假如你这样写SELECT
*
FROM
common_message
WHERE
message_category = 'READ'
AND message_status != '0' or message_status IS NULL查询出来的结果确实这样的



你会发现结果集中不仅包含READ还包含OPERATE,oh my god,我的and条件竟然失效了。
假如你这个时候你给or拼接的条件加个“()”,你会惊奇的发现,and有起作用了SELECT
*
FROM
common_message
WHERE
message_category = 'READ'
AND (message_status != '0' or message_status IS NULL)


PS:原因是and和or优先级一样,sql执行的时候按照顺序,所以结果集就不对了,如果加了“()”之后,优先级高了,就会先查找不等于0的和为null的,然后在这个基础上进行and条件的查询。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: