工作查询:我的查询正在运行,我也得到了我想要的结果。我只是想知道我是否做错了什么,因为我听说这不是在 Where 子句中使用 IF 的正确方法,但在我的情况下,它甚至在子查询中。我自己做了这个查询。如果我的查询有更好的替代方案,请告诉我。
寻找:我试图让所有在 14:00 和 15:00 之间不忙的员工,其中 14:00 和 15:00 是来自输入字段的时间(如搜索)。
SELECT *
FROM `schedule`
WHERE appointment_id NOT IN (
SELECT appointment_id
FROM `schedule`
WHERE ( IF(start_time < '14:00', '14:00', start_time) >= '14:00'
AND IF(end_time > '15:00', '15:00', end_time) >= '14:00')
AND (IF(start_time < '14:00', '14:00', start_time) <= '15:00'
AND IF(end_time > '15:00', '15:00', end_time) <= '15:00')
AND `appoint_date` = '2018-11-30')
我什至没有看到IF
调用的意义,我们可能会在没有它们的情况下重写您的查询:
SELECT *
FROM schedule
WHERE appointment_id NOT IN (
SELECT appointment_id
FROM schedule
WHERE
end_time >= '14:00' AND -- this
start_time <= '15:00' AND -- and this tests for all possible cases of overlap
appoint_date = '2018-11-30');
我能够删除您WHERE
条款中的两个条件,因为它们始终为真。这是两个示例之一:
IF (start_time < '14:00', '14:00', start_time) >= '14:00'
这将始终是正确的,因为任何 是14:00
或更早的时间都会被提升到14:00
. 所以,这样的时候总是>= 14:00
。同样的,任何时候已经大于比14:00
也将通过检查。因此,可以删除整个术语以及另一个术语。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句