代码中发现的问题:
首先我的表结构如下
我需要查询出环境变量envi为0情况下历史标志为1或者是否有效为1的结果
刚开始sql为:select * from test where envi=0 and lsbz=1 or sfyx=1
逻辑上好像没有问题,但是结果不如意,在查询结果中发现有envi=1的情况
进行sql:select * from test where envi=0 or sfyx=1 and lsbz=1;
查询结果得到:不管and or位置怎样放置,查询结果一致
想起来都把基础忘记了,数据库执行sql是有优先级的,and的优先级高于or,先执行and,再执行or
但是执行sql:select * from test where envi=0 and lsbz=1
只有一条数据
所以,and的优先级高于or,执行sql会先执行and,sql执行将and作为一个整体条件与or进行数据条件获取,相当于执行sql:select * from test where (envi=0 and lsbz=1) or sfyx=1 ;
所以要实现刚开始那样的想法需要这样执行:select * from test where envi=0 and (lsbz=1 or sfyx=1) ;
and 和or的执行优先级问题
最新推荐文章于 2023-04-23 16:53:07 发布