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

