SQL - łączenie trzech tabel, JOIN

0

Witam,
mam trzy tabele TAB1(Lp, Tytul, PKT), TAB2(Lp, Tytul, PKT), TAB3(Lp, Tytul, PKT). W większości "Tytul" powtarza się w każdej z trzech tabel. Dla niektórych wartości PKT występują NULL. Chciałbym zsumować wartości kolumn "PKT" z tych trzech tabel tj. dostać coś takiego:
Tytul1 / TAB1.PKT1 / TAB2.PKT1 / TAB3.PKT1 / Suma1
Tytul2 / TAB1.PKT2 / TAB2.PKT2 / TAB3.PKT2 / Suma2
Tytul3 / TAB1.PKT3 / TAB2.PKT3 / TAB3.PKT3 / Suma3

Mogę to zrobić dla dwóch tabel za pomocą poniższego kodu:

SELECT 
COALESCE(TAB1.Tytul,TAB2.Tytul) AS Tytul, 
COALESCE(TAB1.PKT,0)+COALESCE(TAB2.PKT,0) AS SUMA
FROM TAB1 FULL JOIN TAB2 ON TAB1.Tytul=TAB2.Tytul ORDER BY SUMA DESC

Ale jak to zrobić dla trzech? Próbowałem jak niżej, ale wyskakuje mi "Incorrect syntax near":

SELECT 
TAB1.Tytul, 
COALESCE(TAB1.PKT,0)+COALESCE(TAB2.PKT,0)+COALESCE(TAB3.PKT,0) AS SUMA
FROM TAB1 FULL JOIN TAB2 FULL JOIN TAB3 ON TAB1.Tytul=TAB2.Tytul AND TAB2.Tytul=TAB3.Tytul ORDER BY SUMA DESC

Ktoś może mnie jakoś nakierować na właściwą drogę?

1

Select tab1.id, tab2.id, tab2.id_tab1, tab2.id_tab3, tab3.id
from tab1
join tab2 on tab1.id=tab2.id_tab1
join tab3 on tab3.id =tab2.ia_tab3

Mam nadzieję że się polapiesz, nie mam jak tego sformatować w tym momencie.

0

Dzięki, udało się nawet dla czterech tabel :)

0

Join po jakichś tytułach to średni pomysł. A jak będzie różna wielkość liter?

Skoro tabele mają tę samą strukturę, ale są osobnymi zbiorami, to sklejamy je ze sobą:

select t1.tytul, t1.pkt as pkt1, 0 as pkt2, 0 as pkt3
from tab1 t1
union all
select t2.tytul, 0 as pkt1, t2.pkt as pkt2, 0 as pkt3
from tab2 t2
union all
select t3.tytul, 0 as pkt1, 0 as pkt2, t3.pkt as pkt3
from tab3 t3;

Teraz robimy sumowanie:

SELECT tytul
, sum(pkt1) as s_pkt1
, sum(pkt2) as s_pkt2
, sum(pkt3) as s_pkt3
, sum(pkt1 + pkt2 + pkt3) suma
FROM
(
select t1.tytul, t1.pkt as pkt1, 0 as pkt2, 0 as pkt3
from tab1 t1
union all
select t2.tytul, 0 as pkt1, t2.pkt as pkt2, 0 as pkt3
from tab2 t2
union all
select t3.tytul, 0 as pkt1, 0 as pkt2, t3.pkt as pkt3
from tab3 t3
)
GROUP BY tytul;

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