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