You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL多条件查询结果异常,请求排查SQL语句错误

你的MySQL查询问题分析与修复方案

嘿,这个问题我太熟了——你遇到的是MySQL运算符优先级的坑!

问题根源

在MySQL里,AND的优先级比OR高,所以你写的原查询:

SELECT * FROM `notifications` WHERE `receiverUserID` = 3 AND `status` = 0 AND `typ` = 1 OR `typ` = 2

会被数据库自动解析成这样的逻辑:

SELECT * FROM `notifications` 
WHERE (`receiverUserID` = 3 AND `status` = 0 AND `typ` = 1) 
OR `typ` = 2;

也就是说,只要满足typ=2的行,不管receiverUserID是不是3、status是不是0,都会被筛选出来——这就是为什么你会看到receiverUserID=2的行混进来。

修复方案

你需要用括号把typ的两个条件括起来,明确告诉数据库:先判断typ是1还是2,再和前面的receiverUserID=3、status=0这两个条件同时满足。

方案一:用括号分组OR条件

SELECT * FROM `notifications` 
WHERE `receiverUserID` = 3 
AND `status` = 0 
AND (`typ` = 1 OR `typ` = 2);

方案二:用IN简化条件(更推荐,可读性更强)

如果是判断字段是否在多个值里,用IN比连续的OR更清晰:

SELECT * FROM `notifications` 
WHERE `receiverUserID` = 3 
AND `status` = 0 
AND `typ` IN (1, 2);

小提醒

以后写包含AND和OR的复合查询时,一定要用括号明确你的逻辑分组,别依赖默认的运算符优先级——不然很容易写出和预期不符的SQL哦!

内容的提问来源于stack exchange,提问作者Trombone0904

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:37:32