在写sql查询数据的时候,有时候由于需求,会经常会对一个字段进行多个条件匹配,所以就会用到or
关键字,但是再又需要匹配另一个字段为一个条件的时候,就需要用到and
关键字。
这个时候,就要注意了,两个的顺序和优先级需要先理清楚,否则select到的结果和想象中的肯定是有差距
稍不注意就会出现下面的结果:
-
select * from A where flag =1 or flag = 2 and id is not null;
这句sql很简单,就是查询出来的数据,flag=1或者2都可以,并且id 不能为null,但是运行出来的结果中肯定会有id为null的数据,理论与实践的差距呀~
错误点:- or关键字只要满足一边即可,这是都知道的,但是后面and再这个sql里可有可无,因为满足flag=1那么后面的满足与否都无所谓了,所以这个时候,就会出现id为null的数据!!
解决方案:
说完了问题,那么怎么解决呢?
其实很简单就解决了,不过就是写的时候可能会不注意而已,如果发现这个问题,那么自然是和简单就解决了- 增加括号,保证and必须满足的情况
select * from A where (flag =1 or flag = 2) and id is not null;
- 调整and的顺序,保证先执行到and,那么and需要的条件就一定会满足
select * from A where id is not null and flag =1 or flag = 2