OT: Správná formulace SQL dotazu v PostgreSQL

tv na fuzzy.cz tv na fuzzy.cz
Středa Březen 26 16:06:53 CET 2008


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
>





Další informace o konferenci Linux