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
相关产品推荐
相关产品推荐

