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 Databases