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

WHERE子句查询结果异常求助:SQL返回active为0的记录

解决SQL查询返回不符合active状态记录的问题

嘿,这个问题我太熟了——本质是SQL里运算符优先级在搞鬼!

你当前的SQL语句:

SELECT id, title, message_short, date_posted, posterID, active, deleted 
FROM articles 
WHERE title LIKE '%blah%' OR message LIKE '%blah%' AND deleted = 0 AND active = 1 
ORDER BY date_posted DESC

问题出在哪?

SQL里AND的优先级比OR高,所以数据库会先执行message LIKE '%blah%' AND deleted = 0 AND active = 1这部分,再和title LIKE '%blah%'做OR判断。这就导致:只要title匹配%blah%,哪怕active=0或者deleted=1的记录也会被查出来——这就是你看到不符合预期结果的原因。

正确的写法

把两个模糊匹配的条件用括号包起来,强制让数据库先执行OR逻辑,再和后面的过滤条件结合:

SELECT id, title, message_short, date_posted, posterID, active, deleted 
FROM articles 
WHERE (title LIKE '%blah%' OR message LIKE '%blah%') AND deleted = 0 AND active = 1 
ORDER BY date_posted DESC

简单解释

括号改变了运算顺序:现在数据库会先判断title或message是否包含blah,只有满足这个前提的记录,才会进一步检查deleted=0和active=1的条件,这样就不会出现active=0的记录啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:47:41