【问题标题】:Why does this DATE operator not work on my query?为什么此 DATE 运算符不适用于我的查询?
【发布时间】:2020-12-27 09:09:17
【问题描述】:

谁能向我解释为什么在我尝试选择日期大于特定日期的数据时,它会运行查询,但我仍然看到 2020-09-01 之后的日期? Due_date 是一个日期,存储在 MySQL 数据库中的 YYYY-MM-DD。

Select
        *
    from
        records
    where
        job_id = 13582
        OR job_id = 13583
        OR job_id = 13698
        OR job_id = 13699
        OR job_id = 13700
        OR job_id = 13738
        OR job_id = 14133
        AND due_date NOT IN (
            Select
                due_date
            from
                records
            where
                due_date > date('2020-09-01')
        );

【问题讨论】:

    标签: mysql database web


    【解决方案1】:

    请注意您如何使用ANDs 和ORs。 And 的优先级高于OR,有点像* 在算术上的优先级高于+

    这意味着你的查询相当于

    SELECT
      *
    FROM
      records
    WHERE
      job_id = 13582
      OR job_id = 13583
      OR job_id = 13698
      OR job_id = 13699
      OR job_id = 13700
      OR job_id = 13738
      OR (job_id = 14133 AND due_date NOT IN (
        Select
          due_date
        from
          records
        where
          due_date > date('2020-09-01')
        )
      );
    

    当你的意思可能是

    SELECT
      *
    FROM
      records
    WHERE
      (job_id = 13582
      OR job_id = 13583
      OR job_id = 13698
      OR job_id = 13699
      OR job_id = 13700
      OR job_id = 13738
      OR job_id = 14133)
      AND due_date NOT IN (
        Select
          due_date
        from
          records
        where
          due_date > date('2020-09-01')
        );
    

    避免这种情况的一个好方法是,与其使用这么多 OR 语句,不如使用一个 IN 语句:

    SELECT
      *
    FROM
      records
    WHERE
      job_id IN (13582, 13583, 13698, 13699, 13700, 13738, 14133)
      AND due_date NOT IN (
        Select
          due_date
        from
          records
        where
          due_date > date('2020-09-01')
        );
    

    还有一个更好的解决方案是

    SELECT
      *
    FROM
      records
    WHERE
      job_id IN (13582, 13583, 13698, 13699, 13700, 13738, 14133)
      AND due_date <= date('2020-09-01');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多