首页 > 解决方案 > 带有 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'

标签: mysqlsql

解决方案


您需要清楚地将检查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';

显然,这与您可能想要的逻辑不同。


推荐阅读