MySQL选择与查询不同的所有行

时间:2014-10-09 13:21:10

标签: mysql

我尝试在Stackoverflow和Google上搜索此内容,但没有找到任何内容,如果这是重复的话,我会很高兴,如果有人向我提出原始问题,我会很感激。

目前我有一个包含3列的表:id,starttime和endtime。然后,我使用查询预订,开始时间为10:30 10.10.2014,结束于2014年10月10日13:45,如下:

SELECT * 
  FROM reservations 
 WHERE ('2014-10-10 10:30:00' BETWEEN starttime AND endtime)
         OR 
       ('2014-10-10 13:45:00' BETWEEN starttime AND endtime)
         OR 
       ('2014-10-10 10:30:00' >= starttime AND '2014-10-10 13:45:00' <= endtime)
         OR 
       ('2014-10-10 10:30:00' <= starttime AND '2014-10-10 13:45:00' >= endtime);

因此查询检查该预留是否与任何现有预留冲突,然后返回冲突预留。但我希望它反过来并返回所有不与查询冲突的行。

我现在已经尝试解决这个问题很多个小时了,并希望能够帮助我找到正确的方向。

2 个答案:

答案 0 :(得分:1)

我简化了您的查询(显示冲突):

SELECT *
 FROM reservations
 WHERE '2014-10-10 10:30:00' <= endtime
   AND starttime <= '2014-10-10 13:45:00'

获取与查询日期不冲突的所有行:

SELECT *
 FROM reservations
 WHERE NOT ('2014-10-10 10:30:00' <= endtime
   AND starttime <= '2014-10-10 13:45:00')

答案 1 :(得分:0)

试试这个:

 select *
 from reservations
 where starttime >= '2014-10-10 10:40:00'
       and endtime <= '2014-10-10 13:45:00'