OT: Správná formulace SQL dotazu v PostgreSQL

Jiří Volf konference na volfovi.net
Čtvrtek Březen 27 09:54:52 CET 2008


pardon, omlouvám se za tento OT
Tento SQL dotaz byl součástí experimentu
při provádění laboratorní práce, kterou dostal bratr ve škole
z výpočetní techniky, nazývajíc se
"Srovnání výkonu PostgreSQL a MySQL", takže jsme pokládali
nějaké dotazy od jednodušších  až po složité (i několikanásobně)
vnořené dotazy a měřili :-)
Pomocí grupování to samozřejmě běží, a právě jsme chtěli zkusit,
o kolik to bude pomalejší, pokud to spustíme s vnořeným selectem.
No a právě při použití toho vnořeného selectu s podmínkou jsme dostávali
téměř dvojnásobnou dobu při zpracování (než bez té podmínky).
Tedy mnoho na to, že přibyla jedna podmínka a málo na to, aby
se ten vnořený dotaz prováděl dvakrát.

JV

tv na fuzzy.cz napsal(a):
> 1) Jste si jistý že píšete do správné konference? Tahle je o Linuxu, ne o
> PostgreSQL ...
>
> 2) Nabylo by lepsi napsat jak presne jste ten dotaz zapsal nez jenom "neco
> jako"? Kazdopadne ten uvedeny dotaz je nekorektni protoze tam uplne chybi
> tabulka 'autor', ale to je jedno.
>
> Problem je v tom ze se ve WHERE odkazujete na sloupec 'pocet' ktery ale je
> odvozeny ze SUBSELECTU, a to nejde - mate dve moznosti jak to opravit.
>
> a) Bud tak ze obe tabulky zjoinujete, zgrupujete podle autor.id, spocitate
> radky pres count(kniha.id). V tomhle pripade ani nemusite zadnou podminku
> uvadet, protoze to je zajisteno zjoinovanim.
>
> b) Take muzete cely select (bez where podminky) zapouzdrit do FROM jineho
> selectu, ve kterem uz tu WHERE podminku uvest muzete.
>
> T.V.
>
>   
>> Dobrý den,
>> dejme tomu, že mám databázi:
>> KNIHA(ID,NAZEV,AUTOR_ID) , AUTOR(ID,NAZEV)
>>
>> požadavek je vypsat jméno a počet napsaných knih všech
>> autorů, kteří napsali alespoň jednu z nich.
>>
>> Nejdříve jsem sestrojil něco jako:
>> select autor.nazev, (select count(kniha.id) from kniha where
>> kniha.autor_id=autor.id) as pocet_knih where pocet_knih>0;
>>
>> jenomže to mi v postgre (7.4) nepracuje, píše to neznámý
>> sloupec "pocet_knih". Je v tomto nějaký problém?
>> Je to ve vyšších verzích OK? Nebo mám jen špatně
>> zafixováno, že by to mělo fungovat?
>>
>> Tato formulace již funguje:
>>
>> select autor.nazev, (select count(kniha.id) from kniha where
>> kniha.autor_id=autor.id) having (select count(kniha.id) from kniha where
>> kniha.autor_id=autor.id)>0;
>>
>> Neprovádí se ale zde tento vnořený SQL dotaz dvakrát?
>>
>> Díky.
>>
>> JV
>>
>> _______________________________________________
>> Linux mailing list
>> Linux na linux.cz
>> http://www.linux.cz/mailman/listinfo/linux
>>
>>     
>
>
> _______________________________________________
> Linux mailing list
> Linux na linux.cz
> http://www.linux.cz/mailman/listinfo/linux
>
>   




Další informace o konferenci Linux