Co mam spatne v SQL dotazu?

Honza Pazdziora adelton na informatics.muni.cz
Úterý Říjen 10 11:12:36 CEST 2000


On Tue, Oct 10, 2000 at 09:03:56AM +0000, Ing. Jiri Sika - Senior Web Programmer wrote:

>   Mam tri tabulky prvni "Klienti" je zakladni (cislo_klienta,
> jmeno_klienta). Pak jsou dve doplnkove. "Knizky" a "Kazety"
> (cislo_zbozi, cislo_klienta, cena). Jak zapsat dotaz, ktery mi
> poskytne vysledek typu "Karel ma 5 knih za 100 kc a 6 kazet za
> 1000 Kc."?
> Zkusil jsem:
> 
> select Klienti.jmeno_klienta ,
> 	count(Knizky.cena) ,
> 	sum(Knizky.cena) ,
> 	count(Kazety.cena) ,
> 	sum(Kazety.cena)
> from Klienti
> left join Knizky
> 	on Klienti.cislo_klienta=Knizky.cislo_klienta
> left join Kazety
> 	on Klienti.cislo_klienta=Kazety.cislo_klienta
> group by Klienti.cislo_klienta;
> 
> A misto vyse uvedene odpovedi dostanu nasledujici: "Karel ma 30
> knih za 600 kc a 30 kazet za 5000 Kc." Zkratka vse u Kazet je
> pronasobene poctem Knih a naopak.

No, pronasobi -- agregacni funkce se pocitaji z radku, ktere jim
predhodite. A Vy jste jim predhodil kartezsky soucin. Zkuste si to
pustit normalne bez group by jenom se select * -- uvidite, jake radky
se pouzivaji. Navic, pokud Karel nekoupil ani jednu kazetu, mozna bude
vysledek uplne spadne.

Nebylo by uplne nejjednodussi rozhodit to na dva selecty?

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
------------------------------------------------------------------------


Další informace o konferenci Test