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

标签 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;

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

以下是我想要实现的开始日期 2016-03-17 和结束日期 2016-03-20 的结果: http://sqlfiddle.com/#!9/553d49/6/0

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

有没有办法在不使用NUMBERS的情况下做到这一点?或类似的技巧(即我希望不必生成单独的表)?

最佳答案

这对你有帮助吗?

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;

关于MySQL 选择日期范围内每个日期不存在相关行的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36077737/

相关文章:

sql - TOP 总是返回相同的行吗

ios - 连接到 iPhone 应用程序内的 SQL 数据库

mysql - 在表中插入多行的存储过程

mysql - 从 CSV 文件导入的 MySQL 表中得到奇怪的结果。编码问题?

sql - 规范化 ORACLE 11g 中的列名

php - mysql 子查询有多于一列

mysql - 使用 GWT 进行在线音乐流传输

mysql - 序列化关联不生成外键

php - 使用 codeigniter 比较数组中的数据并计算它在数据库中出现的实例数

java spring Long[](数组)类型