mysql - 带有 where、AND 和 OR 的 SQL Select 语句无法正常工作
问题描述
大家好,我的表中有以下行作为示例
id shop_id start_time end_time
1 21 10:00 11:00
我想检查表中是否存在 start_time 和 end_time 我正在使用以下查询但无法正常工作,我错在哪里?
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
和时间范围分开:
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');
MySQL中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';
显然,这与您可能想要的逻辑不同。
推荐阅读
- r - R传单GeoJSON着色
- python - 更新字典的多维字典
- javascript - Leaflet / Mapbox 海上交通密度图
- python - re.sub 在一个 sub 中结合两个规则
- mongodb - 选择什么版本的mongodb?考虑过滤
- docker - 如何在 Docker for Windows 中运行的旧 docker 容器中打开新端口?
- python - 从数字中减去直到它不等于零
- html - 闪烁的svg组:悬停?
- php - System.xml 中文本字段的 Magento2 setValue()
- model - DDD End Runs,应用层调用另一个不在其正下方的