0
我有两张桌子,人员和班次,并且对于每个想要 的人都可以获得一周的所有班次。 问题是,并不是每个日期都有一个转变。 如果没有转变我想获得一个动态的模板结果的日期在没有转变为速效UNION和BETWEEN日期
SELECT p.id, p.name, s.date_of_shift
FROM people AS p
LEFT JOIN LATERAL (
SELECT sh.id, sh.date_of_shift, sh.person_id
FROM shifts as sh
) AS s ON p.id = s.person_id
WHERE p.id = 2 AND s.date_of_shift BETWEEN '2016-03-21' AND '2016-03-25'
UNION ALL
SELECT null, null, '2016-03-21'
WHERE NOT EXISTS (
SELECT 1
FROM people AS p
LEFT JOIN LATERAL (
SELECT sh.id, sh.date_of_shift, sh.person_id
FROM shifts AS sh
) AS s ON p.id = s.person_id
WHERE p.id = 88000 AND s.date_of_shift BETWEEN '2016-03-21' AND '2016-03-25');
这是我成功地创建查询。问题是我总是得到相同的日期。但我希望日期在没有转变的范围内。
嗨帕特里克,谢谢你的回答。不幸的是,这并不能解决问题。我做了一个小提琴,以证明在没有转变的日子里,我没有得到任何结果。 http://sqlfiddle.com/#!15/c04ae/3/0。 – Elux91
问题肯定是where子句[this](http://sqlfiddle.com/#!15/f2fb7/1)给出了更多我想要的东西。但它没有指定person_id。所以我需要找到一个解决方案。我已经有了一个想法,但明天我会做。感谢您的帮助。 @Patrick – Elux91
嗨Elux91。将WHERE子句移入子选择并选择DISTINCT值。查看更新的答案。首先提供一个SQLFiddle - 或者至少是表格定义,样本数据和期望的输出 - 在几个小时前会给你一个合适的答案{;-) – Patrick