Autor Zpráva
Lion76
Profil *
Zdravim, mam nize db dotaz, ktery spatne spocita ciselne hodnoty. Urcite bude chyba v tom spojeni, protoze kdyz to vyresim poddotazem t.j.

SELECT SUM(pocet) celkem FROM nejakaTabulka WHERE id IN (SELECT id FROM nejakaTabulka WHERE nazev = 'neco')

tak se spravne vypisi hodnoty ve sloupci, ktery chci spocitit. Ale proc to spravne nespocita ve spojeni?

Zkraceny db dotaz:

SELECT SUM(t4.pocet) AS celkem
FROM tabulka1 AS t1
LEFT JOIN tabulka2 AS t2 ON t1.id = t2.id
LEFT JOIN tabulka3 AS t3 ON t1.id = t3.id
LEFT JOIN tabulka4 AS t4 ON t1.id = t4.id
WHERE t1.id
IN (
SELECT id
FROM nejakaTabulka
WHERE nazev = 'neco'
)
GROUP BY t1.nazev
Kajman_
Profil *
Dejte si select * bez group, ať vidíte, že se vám řádky násobý kartézkým součinem a proto jsou výsledky takové.
Lion76
Profil *
Kajman_

Ano mate pravdu, ale jak z toho ven?
Kajman_
Profil *
např.

select (select sum(t4.pocet) from tabulka t4 where t4.id=t1.id) celkem
FROM tabulka1 AS t1
LEFT JOIN tabulka2 AS t2 ON t1.id = t2.id
LEFT JOIN tabulka3 AS t3 ON t1.id = t3.id
IN (
SELECT id
FROM nejakaTabulka
WHERE nazev = 'neco'
)
GROUP BY t1.nazev

nebo třeba připojovat již zgroupované tabulky 2 až 4, tak aby měly vždy jen jeden řádek odpovídající t1.id
Lion76
Profil *
Kajman_

Super, dekuji, ja si s tim pohraji, alespon zjistim, co bude mit rychlejsi odezvu.
Lion76
Profil *
Kajman_

Vyresil jsem to poddotazama, ale ve zkracce by mne zajimalo, jak by vypadalo spojeni jiz zgroupovane tabulky 2 a 4. Budete tak hodny a uvedete priklad?
Kajman_
Profil *
LEFT JOIN (select st1.id, sum(st1.sloupec) soucet from tabulka2 st1 group by st1.id) AS t2 ON t1.id = t2.id

případně tam hned dát omezující podmínky

LEFT JOIN (select st1.id, sum(st1.sloupec) soucet from tabulka2 st1
where st1.id in
(
SELECT id
FROM nejakaTabulka
WHERE nazev = 'neco'
)
group by st1.id) AS t2 ON t1.id = t2.id
Lion76
Profil *
Kajman_

Asi delam neco spatne, protoze nize uvedeny dotaz vypise pouze sloupec "nazev".

SELECT t1.nazev AS nazev
FROM tabulka1 AS t1
LEFT JOIN (

SELECT st1.id, SUM(st1.cenaSDph) AS soucet
FROM tabulka2 AS st1
GROUP BY st1.id
) AS t2 ON t1.id = t2.id
WHERE t1.id
IN (

SELECT id
FROM nejakaTabulka
WHERE nazev = 'neco'
)
Kajman_
Profil *
Však tam máte jenom název, jestli chcete součet, tak si přidejte t2.soucet.

SELECT t1.nazev AS nazev, t2.soucet
Lion76
Profil *
Kajman_

Ja jsem magor. :o) Dekuji. Vyreseno.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0