我在子查询 MySQL 的 Where 子句中使用 NOT IN 和 IF 是否正确?

赛义德·莫哈末阿里

工作查询:我的查询正在运行,我也得到了我想要的结果。我只是想知道我是否做错了什么,因为我听说这不是在 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以在MySQL的where子句中使用当前的Dayname?

在MySQL的where子句中使用多个表更新查询

如何在 from 和 where 子句中使用相同的 psql 子查询?

在 WHERE 子句中使用 MySQL 变量

if else 在 mysql where 子句中使用

在Where子句中使用Mysql变量

MYSQL - 在 WHERE IN 子句中使用数组

MYSQL在WHERE子句中使用别名

如何在MySQL where和where子句中的语句中使用正则表达式

是否可以在 mysql where 子句中使用 json 列表中的多个值?

在where子句中使用AVG函数和DATEADD进行嵌套查询

在 where 子句中使用自联接和 group bys 优化查询

在MySQL查询的WHERE子句中使用列别名会产生错误

在WHERE子句中使用<>(不相等)时,MySQL查询传递错误的结果

如何在Laravel中的MySQL查询的where子句中使用数组

在where子句中使用sleep()时,MySQL查询花费的时间太长

MySQL:强制查询在WHERE子句中使用带有局部变量的索引

MySQL:在WHERE IN子句中使用复合键的查询非常慢

MySQL别名子查询不能在where子句中使用

在 where 子句中使用字符串比较的 Python MySQL 查询

MySQL:在Where子句中使用过滤器查询

在Select和where子句中优化MYSQL查询TIMEDIFF

如何在openquery where子句中使用子查询

在 where 子句中使用子查询分解结果

TimescaleDB中gapfill的WHERE子句中使用子查询

在组By或where子句中使用子查询SQL Server

在动态where子句中使用子查询

在 where 子句中使用子查询更新语句

如何在peewee的where子句中使用子查询?