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