我有一个查询,它根据特定日期不存在的相关表中的行从一个表中进行选择。现在,我对我感兴趣的每个日期多次调用此查询一次。但出于性能原因,我想要一次往返数据库。我想扩展此查询以在日期范围内工作,并返回在每个日期的另一个表中没有相关行的范围内的所有行(即,范围中每个日期的当前查询的结果的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或类似技巧的情况下执行此操作(即我希望不必生成单独的表格)?
答案 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;