Zdravím, mám tři tabulky první dejme tomu žák s id, jméno, příjmení. Druhou id_žáka, body_x, třetí id_žáka, body_y. Potřeboval bych jedním výběrem dostat jméno, příjmení, sum(body_x), sum(body_y). Když to udělám tak že tabulky normálně spojím první LEFT JOIN druhá LEFT JOIN třetí tak mi to v podstatě udělá něco jako CROSS JOIN a výsledek je nesmyslný součet. Můžete mi prosím poradit jak data získat v rámci jednoho dotazu?
Fórum › MySQL
Sloučení tří tabulek + výběr agregační funkcí
Zkusil bych (první JOIN druhá as tbl1) UNION (první JOIN třetí as tbl2). Nebo bych zkusil poddotazem získat id žáků z první a udělat UNION výsledků z druhé a třetí.
hu
Jen bacha, unionovat lze jen tabulky se stejnym poctem sloupcu. Mohlo by to vypadat nejak takto. To grupovani by slo mozna udelat az na zaver.
SELECT id_žáka, x, y
FROM
(
(SELECT id_žáka, sum(body_x) AS x, NULL AS y FROM ... GROUP BY id_žáka)
UNION
(SELECT id_žáka, NULL AS x , sum(body_y) AS y FROM ... GROUP BY id_žáka)
GROUP BY id_žáka
)
LEFT JOIN ... jmeno zaka a pod
Jo, predposledni radky meli byt jinak. A mohlo by to jit i jednim grupem. A az mas cely vysledek, id, body, teprve pak na to nabalis jmena zaku. Dokud muzes, tak pracujes zkratka s cisly.
SELECT id_žáka, x, y
FROM
(
(SELECT id_žáka, sum(body_x) AS x, NULL AS y FROM ...)
UNION
(SELECT id_žáka, NULL AS x , sum(body_y) AS y FROM ...)
GROUP BY id_žáka
)
LEFT JOIN ... jmeno zaka a pod
Ale, uz zase to mam spatne :) Jo, a union myslim vyzaduje pro tabulky aliasy, viz a, b, c
To grupovani lze napsat totiz az na konci. Ale mozna bych to nechal u tech selectu --1, --2. Nemam takove znalosti, abych mohl posoudit, co bude rychlejsi. Tipnul bych si nejdriv zgrupovat vysledky a pak zgrupovat ty 2 cisla.
SELECT c.id_žáka, sum(c.x), sum(c.y) FROM ( (SELECT id_žáka, sum(body_x) AS x, NULL AS y FROM ... GROUP BY id_žáka) a -- 1 UNION (SELECT id_žáka, NULL AS x , sum(body_y) AS y FROM ... GROUP BY id_žáka) b -- 2 ) c LEFT JOIN ... jmeno zaka a pod
GROUP BY id_žáka
Jen pro zamysleni - proc mas dve tabulky s body? Proc nemit jednu tabulku body: id_zaka, typ, body a udelat pak typ, sum(body) nad group by typ ci spise group by id_zaka, typ?
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Sloučení tabulek — založil CZechB0Y
Sloučení tabulek s výběrem hodnot — založil Marek
Schema DB - sloučení 3 tabulek do jedné — založil TomasUL
Sloučení 2 funkcí v 1 — založil Nikishek
Sql zřetězení tří tabulek - začátečník — založil Cup
Moderátoři diskuze