MySQL选择日期范围内每个日期不存在相关行的行

时间:2016-03-18 06:38:53

标签: mysql sql

我有一个查询,它根据特定日期不存在的相关表中的行从一个表中进行选择。现在,我对我感兴趣的每个日期多次调用此查询一次。但出于性能原因,我想要一次往返数据库。我想扩展此查询以在日期范围内工作,并返回在每个日期的另一个表中没有相关行的范围内的所有行(即,范围中每个日期的当前查询的结果的UNION)。结果必须包括每行中的日期。我目前的查询是这样的:

   SELECT 
          t1.id,
          t1.field1,
          t1.field2, 
          '2016-03-17' AS nightof_date,
          1 as marker
        FROM 
          t1
        LEFT JOIN t2 ON (
          (t2.a_date = '2016-03-17') 
          AND (t2.t1_id=t1.id) 
          AND (some conditions...))
        WHERE 
          (t2.id is NULL)
          AND (some other conditions...)
        GROUP BY 
           t1.field3;

这是一个单一查询的小提琴: http://sqlfiddle.com/#!9/553d49/6/0

以下是我在2016-03-17开始日期和2016-03-20结束日期所要达到的目标: http://sqlfiddle.com/#!9/553d49/6/0

(我想我可以通过编程方式生成像这样的怪物联合查询,但我希望能有更优雅的东西,我只能使用开始和结束日期)

有没有办法在不使用NUMBERS或类似技巧的情况下执行此操作(即我希望不必生成单独的表格)?

1 个答案:

答案 0 :(得分:0)

这对你有帮助吗?

SELECT 
      t1.id,
      t1.name,
      t1.birth, 
      '2015-01-01 AND 2015-01-03' AS nightof_date
    FROM 
      t1
    LEFT JOIN t2 ON (t2.t1_id=t1.id
                    AND
                    (t2.birth BETWEEN '2015-01-01' AND '2015-01-03')) 
         WHERE (t2.id is NULL)
    GROUP BY 
       t1.name;