OT: Správná formulace SQL dotazu v PostgreSQL
Petr Klíma
petr.klima na sobriety.cz
Středa Březen 26 16:01:28 CET 2008
Jiří Volf wrote:
> 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?
Nemaje detailnich znalosti vnitrnosti postgresu, tezko rici, jak onen
dotaz optimalizuje. Ja bych ale spis zkusil dotaz ve stylu
select autor.nazev,count(*) from kniha,autor where
kniha.autor_id=autor.id group by autor.nazev;
Pisu to z hlavy, ale principielne by to melo fungovat.
PK
--
Petr Klíma
Vývojář, správce sítě
Sobriety s.r.o.
e-mail: petr.klima na sobriety.cz
Další informace o konferenci Linux