ugrás a tartalomhoz

mysql joinra szűrés

Theo76 · 2017. Már. 9. (Cs), 09.51
Sziasztok!

Van 3 táblám, amik LEFT JOIN-al vannak összekapcsolva.
A Tabla1 és Tabla2 kapcsolatával nincs gond, viszont a Tabla3 több sornyi adatot tartalmazhat, amit szűrnöm kell, hogy csak bizonyos sorok jelenjenek meg, és abból az egyik oszlop adatait összekéne adni soronként.
Próbálkoztam ezzel a paranccsal:
SELECT t1.*, t2.`Data1`, IFNULL(SUM(t3.`Numb`),0) AS `Numb`
FROM Tabla1 t1
LEFT JOIN `Tabla2` t2 on t2.`Tabla1Id` = t1.`Id`
LEFT JOIN `Tabla3` t3 on t3.`Tabla1Id` = t1.`Id` AND t3.`Status` = 3
Valamiért csak az első sort hajlandó visszaadni, holott a Tabla1 összes sorára szükségem lenne.

Pl.:
Tabla1 tartalma:
Id | Data  
---|-------
1  | data1 
---|-------
2  | data2
---|-------
3  | data3
Tabla2 tartalma:
Id | Tabla1Id | Data1
---|----------|-------
1  | 1        | data1
---|----------|-------
2  | 2        | data3
Tabla3 tartalma:
Id | Tabla1Id | Numb | Status
---|----------|------|--------
1  | 1        | 3    | 0
---|----------|------|--------
2  | 1        | 2    | 1
---|----------|------|--------
3  | 2        | 7    | 3
---|----------|------|--------
4  | 1        | 6    | 3
---|----------|------|--------
5  | 2        | 2    | 4
---|----------|------|--------
6  | 1        | 1    | 1
A kapott eredménynek így kellene kinéznie:
Id | Data  | Data1 | Numb
---|-------|-------|------
1  | data1 | data1 | 5
---|-------|-------|------
2  | data2 | data3 | 7
---|-------|-------|------
3  | data3 | NULL  | 0
 
1

Meglett a megoldás! :) A

Theo76 · 2017. Már. 9. (Cs), 13.11
Meglett a megoldás! :)

A JOIN után következő utasítást beágyazott SELECT-ként kell kezelni, és ott már lehet szűrni is, illetve a SUM()-ot is ott kellett elhelyezni:
SELECT t1.*, t2.`Data1`, IFNULL(t3.`Numb`) AS `Numb`  
FROM Tabla1 t1  
LEFT JOIN `Tabla2` t2 on t2.`Tabla1Id` = t1.`Id`  
LEFT JOIN (SELECT `Tabla1Id`, SUM(`Numb`) AS `Numb` FROM `Tabla3` WHERE `Status` = 3) AS t3 ON t3.`Tabla1Id` = t1.`Id`