Banalny problem ze złączeniem tabeli głównej z dwona zależnymi - ewidentne zaćmienie :/

0

Zaćmienie mam nadzieje, że to z gorąca, a nie obumarcia komórek mózgowych ;)

Uproszczę temat coby skupić się na esencji zreszta powinien sobie poradzić.
Są trzy tabele:

  1. projekty:
  • id
  • nawa projeku
  • opis
  1. czas:
  • id
  • id_projektu
  • ile godzin
  • dzien
  1. koszty
  • id
  • id_projektu
  • nr_kosztu
  • kwota
  • data

Na potrzeby przykładu potrzebuję zliczyć ile rekordów czasu i kosztów przypisane jest do danego projektu.
Najpierw zapytanie tylko dla zliczenia czasu

SELECT
   projekty.*,    
   count(czas.id) AS ileczasu
FROM
    projekty
LEFT JOIN czas ON projekty.id = czas.id_projektu
GROUP BY projekty.id

dostaję to co chcę.
Teraz próbuje dołożyć tabele kosztów:

SELECT
   projekty.*,    
   count(czas.id) AS ileczasu
   count(koszty.id) AS ilekoszty
FROM
    projekty
LEFT JOIN czas ON projekty.id = czas.id_projektu
LEFT JOIN koszty ON pojekty.id = koszty.id_projektu
GROUP BY projekty.id

I zgodnie z przewidywaniami wychodzi kupa - ale przywołane zaćmienie nie pozwala mi ruszyć tego tematu dalej, czyli ominąć tę kupę i dostać coś bardziej strawnego :/

Pomożecie ? :)
Torin

0

Tabele są mocno przykładowe, w realnym projekcie dużo bardziej złożone, ale prawidłowy wynik zapytania jakiego podałem w przykładzie rozjaśni mi dalszy tok prac.

3

No to rzeczywiście masz zaćmienie, jażeli masz projekt A i B, każdy ma po 2 czas, a tylko A koszty, to takie zapytanie policzy 2 koszty dla projektu A.

Najprościej to puść sobie zapytanie bez agregacji aby zrozumieć dlaczego tak jest, to co chcesz osiągnąć:

select
projekt.id
,sum(c) iloscCzas
,sum(k) iloscKoszty
from 
projekt 
left join (select projekt, count(*) c from czas group by projekt)czas on czas.projekt=projekt.id
left join (select projekt, count(*) k from koszty group by projekt)koszty on koszty.projekt=projekt.id
group by projekt.id

http://sqlfiddle.com/#!9/1f5263/7

0

Oświecenie spływa na mnie - dzięki Panczo!
Biorę się do przeniesienia oświecenia twego do realnego projektu!

1 użytkowników online, w tym zalogowanych: 0, gości: 1