gpt4 book ai didi

mysql - 我在子查询 MySQL 的 Where 子句中使用 NOT IN 和 IF 是正确的方法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:01 24 4
gpt4 key购买 nike

工作查询: 我的查询正在运行,我也得到了我想要的结果。我只想知道我是否做错了什么,因为我听说在 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 的时间也将通过检查。因此,可以删除整个术语以及另一个术语。

关于mysql - 我在子查询 MySQL 的 Where 子句中使用 NOT IN 和 IF 是正确的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53442775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com