Cześć, mam dwie tabele: Calendar, gdzie tabela pełni rolę kalendarza, ma w sobie wszystkie daty od początku (1900-01-01) aż do 2100 roku i różne przydatne informacje dotyczące konkretnych dni.
Mam też drugą tabelę(nazwijmy ją DWR), która załóżmy, że ma taką strukturę:
startDate - datetime
employeeID - bigint
I teraz załóżmy, że w tabeli DWR nie ma rekordów dla dni 1 i 2 sierpnia 2009.
A chcę uzyskać następujące złączenie:
Data | employeeID
--------------------------------------------
2009-08-01 | null
2009-08-02 | null
2009-08-03 | 1
więc piszę tak:
select cal.Date as data, dwr.employeeID
from calendar cal
left join dwr on dwr.startDate = cal.Date
where (dwr.employeeID = 8 or dwr.employeeID is null) and cal.Date>='2009-08-01'
and dbo.get_date(cal.Date)<='2009-08-31'
order by cal.Date
Po mojemu powinienem zobaczyć to, co chcę.
Niestety widzę tylko te dni, które zawiera tabela DWR, czyli w tym przykładzie nie widzę ani 1, ani 2 sierpnia. Co tu jest nie tak?
(jakby co to FULL join zwraca to samo)