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

含WHERE/AND/OR的SQL SELECT语句逻辑异常排查求助

问题排查与修复方案

嘿,我一眼就瞅出问题所在了——这是SQL里经典的逻辑运算符优先级陷阱!

问题根源

在SQL的运算规则里,AND的优先级要比OR高得多。你写的原语句:

select * from usr_booking where shop_id='21' and start_time between '10:10:00' and '11:01:00' or end_time between '10:10:00' and '11:01:00'

实际会被数据库解析成:

(shop_id='21' 且 start_time 在目标区间内) 或者 (end_time 在目标区间内)

这就意味着,哪怕某条记录的shop_id不是21,只要它的end_time落在区间里,也会被查出来——完全违背了你“只查shop_id=21的记录”的初衷。

修正后的SQL

解决方法很简单:把start_time和end_time的判断条件用括号包裹起来,强制让OR逻辑先执行,再和shop_id的条件做AND运算:

select * from usr_booking 
where shop_id='21' 
and (start_time between '10:10:00' and '11:01:00' or end_time between '10:10:00' and '11:01:00');

验证你的样本数据

你的样本记录:

idshop_idstart_timeend_time
12110:0011:00

修正后的语句会成功命中这条记录:因为end_time='11:00'正好处于'10:10:00'到'11:01:00'的区间内,同时shop_id=21的条件也满足。

小提醒:如果你的start_time和end_time字段是TIME或DATETIME类型,尽量使用对应类型的字面量(比如不用字符串,直接写时间值),避免潜在的类型转换问题,但当前场景下字符串格式匹配的话也能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:44:06