我有一个查询,该查询根据特定日期不存在的相关表中的行从一个表中进行选择。现在,我对每个我感兴趣的日期多次调用此查询。但出于性能原因,我希望对数据库进行一次往返。我想扩展此查询以在日期范围内工作,并返回该范围内的所有行,其中每个日期的另一个表中没有相关行(即范围内每个日期的当前查询结果的 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/