SQL dotaz s JOIN

Pavel Stehule stehule na kix.fsv.cvut.cz
Čtvrtek Září 11 09:18:54 CEST 2003


Nebo jeste jednoduseji

select sum(case zobrazit when 't' then 1 else '0'), nazev 
  from sekce join prispevky on idsekce = sekce.id 
  froup by nazev;


Pavel
  

In article <slrnblp0t5.c56.stehule na kix.fsv.cvut.cz>, Pavel Stehule wrote:
> 
> Jde-li Vam o to, jak vypsat sekce, ktere nemaji, zadny viditelny prispevek,
> pak pouzijte UNION. 
> 
> napr. 
> 
> select count (*), nazev 
>   from sekce join prispevky on idsekce=sekce.id
>   where zobrazit = 't'group by nazev
> union
> select 0, nazev 
>   from sekce join prispevky on idsekce = sekce.id 
>   where 'f' = all(
>     select zobrazit from prispevky where idsekce=sekce.id);
> 
> 
>  count | nazev
> -------+--------
>      0 | main
>      1 | links
>      1 | others
> (3 øádek)
> 
> Pavel
> 
> 
> In article <3F56F02B.6050706 na bnm.cz>, Adam Mika wrote:
>> Zdravim,
>> 
>> mam problem, se kterym bych potreboval poradit. Jestli si nekdo udelate
>> cas, budu moc vdecny.
>> 
>> Problem:
>> Vytvarim SQL dotaz, kterym si z databaze vytahuju seznam sekci urciteho
>> serveru. Kazda sekce obsahuje prispevky a ja bych chtel u kazde sekce
>> zobrazit pocet prispevku, ktere dana sekce obsahuje. To v podstate neni
>> problem a jednoduchy dotaz s joinem to vyresi [1].
>> 
>> Problem nastava ve chvili, kdy chci jeste filtrovat prispevky, ktere se
>> maji zapocitat do celkove poctu. V tu chvili se mi prestanou logicky
>> zobrazovat sekce, ktere neobsahuji zadne prispevky. Ja ale potrebuju
>> zobrazit i ty.
>> 
>> Kdyz dam do dotazu jeste WHERE prispevky.zobrazit_prispevek = 'Y', tak
>> logicky u sekci, ktere nemaji prispevky tahle podminka neplati a sekce
>> se vubec nevypise. Existuje nejake reseni, jak tohle obejit? Zkousel
>> jsem to ruznymi zpusoby, ale nepovedlo se. Nerad bych to resil tak, ze
>> bych si pocty prispevku zjistoval az pri vypisovani te konkretni sekce.
>> 
>> 
>> Mam napr. tabulky:
>> SEKCE
>> - id_sekce
>> - nazev_sekce
>> 
>> PRISPEVKY
>> - id_prispevku
>> - nazev_prispevku
>> - zobrazit_prispevek
>> _ id_sekce
>> 
>> 
>> [1]
>>   SELECT
>>    sekce.nazev nazev_sekce,
>>    COUNT(prispevky.id_prispevku) pocet_prispevku
>>   FROM sekce
>>    LEFT JOIN prispevky ON prispevky.id_sekce = sekce.id_sekce
>>   GROUP BY sekce.id_sekce
>>   ORDER BY nazev_sekce
>> 
>> 
>> Diky za pomoc.
>> 


Další informace o konferenci Test