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条件的查询。
假如你这样写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条件的查询。
相关文章推荐
- Thinkphp 查询条件 and 和 or同时使用即复合查询
- MySQL IFNULL中可以有select语句;查询一个表中的数据,同时查看另一个表中是否有符合条件的额数据
- Thinkphp 查询条件 and 和 or同时使用即复合查询
- mysql查询时,and or同时存在时,and的优先级高于or
- Thinkphp 查询条件 and 和 or同时使用即复合查询
- mongo java中and、or多条件查询
- Mysql带And关键字的多条件查询语句
- mysql在把子查询结果作为删除表中数据的条件,mysql不允许在子查询的同时删除原表数据
- MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示
- MySql同时查询三个不关联的表,同时获取到三个表的数据,并按照某一字段排序
- SQLServer复合查询条件(AND,OR,NOT)对NULL值的处理方法
- SQL 复合查询条件(AND,OR,NOT)对NULL值的处理
- mysql查询多个字段同时满足多个条件,取并集
- MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示
- MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示
- MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示
- mysql between and 遇到日期查询边界问题
- mysql进阶(五)数据表中带OR的多条件查询
- MySQL种字符串拆分(substring_index)并作为关联查询条件后多列展示
- thinkphp复合查询AND和OR同时使用