mysql查询中where条件中的or和and注意事项

在mysql的where条件里, and 优先于 or

如果要改变优先级, 需要在想要将其做最小逻辑判断的条件外加括号(),
哪怕是单个条件也是如此.

建议将所有需要做最小逻辑判断的单条件 或 组合条件 都加上括号, 易于理解

使用示例 :
select xxx
from table_name
where (a=1 or b=1) and (c=1);

今天有这样得一个需求,如果登陆人是客服的话,会查询订单是'该客服'以及还没有匹配客服的,刚开始想的是直接在sql语句上拼写 or assigned_id is null 的,测试了一下发现这样的话,前面的其他条件都没有用了

image.png

这样的话,第一个i.server_org_id = 4这个条件已经不适用了,,,,,,,,从这里可以知道AND 的优先级比OR的优先级高,先执行了前面的AND 语句,然后执行后面的OR语句,所以查出来的数据不是我想要的数据

后来又想了一下,可以先将对应的assigned_id查出来,如下

image.png

这样查出来的数据只有assigned_id 为153的

最终版本:

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容