Oskar Oleszkiewicz Programista z pasją
Temat: Problem z wyświetleniem danych - duplikują się!
Witam,Mam problem z zapytaniem do bazy danych. Otóż posiadam trzy tabele, które nie są ze sobą w żaden sposób powiązane ale potrzebuje stworzyć na ich bazie widok, poniżej zamieszczam bardzo skrócony opis problemu:
1. Mam tabelę "Date_Table" w której przechowuję Lata(Year_) oraz Miesiące(Month_) - tabela ta pełni swego rodzaju "słownik" lub szkielet pod całe zapytanie
2. Posiadam też tabele dla umów "Contract_Table", z której pobieram nr umowy (Contract_Id) oraz date podpisania umowy (rozbijam na rok oraz miesiąc), następnie łączę left joinem i porównuje daty z tabeli z kontraktem do tabeli z datami - > wyświetlam i jest OK, wyświetla mio liste wszystkich lat oraz miesięcy a w następnej kolumnie wyświetla numery umów :)
Problem pojawia się gdy w ten sam sposób dodaję następną (niepowiązaną żadnymi relacjami) tabelę w której przechowywane są informacje dotyczące przeznaczonego budżetu na dany miesiąc i rok (Budget_Table), kiedy wstawiam ta tabele do zapytania (left join) zapytanie wykonuję się lecz zwraca astronomiczna ilość wyników (ok 0,5 mln) gdzie przewiduje że powinien zwrócić max 100 tys, rekordy w kolumnach z umowami oraz budżetem dupikują sie po klika razy.
Nie wiem jak rozwiązać ten problem. Poniżej przedstawiam moje zapytanie
select
Year_, Month_, tmp_contract.Contract, tmp_budget.Budget
from Date_Table
left join
(
select
Year(Contract_Signature_Date) as Rok,
Month(Contract_Signature_Date) as Miesiac,
Contract_Id as Contract
from Contract_Table
where Type = '1'
)
tmp_contract
on
tmp_contract.Rok = Year_ and tmp_contract.Miesiac = Month_
left join
(
select
Year_ as Rok,
Month_ as Miesiac,
Budget_Id as Budget
from Budget_Table
where Year(Convert (date, sysdatetime())) <= Year_
)
tmp_budget
on
tmp_budget.Rok = Year_ and tmp_budget.Miesiac = Month_
order by Year_, Month_
Wyników zapytanie niestety nie mogę przedstawić ponieważ generuje prawie milion wierszy :D
Pozdrawiam
Oskar