Autor | Zpráva | ||
---|---|---|---|
Lion76 Profil * |
#1 · Zasláno: 26. 11. 2007, 17:38:38
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 * |
#3 · Zasláno: 26. 11. 2007, 22:45:39
Kajman_
Ano mate pravdu, ale jak z toho ven? |
||
Kajman_ Profil * |
#4 · Zasláno: 26. 11. 2007, 22:49:01
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 * |
#5 · Zasláno: 26. 11. 2007, 22:58:30
Kajman_
Super, dekuji, ja si s tim pohraji, alespon zjistim, co bude mit rychlejsi odezvu. |
||
Lion76 Profil * |
#6 · Zasláno: 27. 11. 2007, 15:10:24
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 * |
#7 · Zasláno: 27. 11. 2007, 19:33:48
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 * |
#8 · Zasláno: 28. 11. 2007, 10:34:04
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 * |
#9 · Zasláno: 28. 11. 2007, 10:43:42
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 * |
#10 · Zasláno: 28. 11. 2007, 10:49:15
Kajman_
Ja jsem magor. :o) Dekuji. Vyreseno. |
||
Časová prodleva: 16 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0