view a parametry subselektu (PG 7.1) - vyreseno
Jiri Borik
jiri.borik na volny.cz
Pondělí Listopad 4 05:41:49 CET 2002
On Thu, 31 Oct 2002, Jiri Borik wrote:
> Ahoj vespolek,
>
> mam tabulku doklad(idd,...) a k ni tabulku zmen historie(idd,datum,popis).
> Chci udelat pohled dkl, ktery obsahuje vsechna pole z doklad a datum a
> popis poslednich dvou zmen z historie.
>
Uz se mi to podarilo. Misto subselektu jsem pouzil funkci. Jine jednodussi
reseni jsem nenasel.
create function doklhist(text,int) returns text as '
declare ret text;
begin
select into ret (datum::date)::text || '' '' || popis
from historie where idd=$1
order by datum desc limit 1 offset $2;
return ret;
end;'
language 'plpgsql';
create view dkl as select *,
doklhist(idd,0) as hist1,
doklhist(idd,1) as hist2
from doklad;
> Pokud zapisu pozadovany vyber pro jedno cislo dokladu, vypada to takto:
>
> select * from doklad,
> (select datum as dat1, popis as pop1 from historie where idd='2002A00002'
> order by datum desc limit 1 ) as h1,
> (select datum as dat2, popis as pop2 from historie where idd='2002A00002'
> order by datum desc limit 1,1 ) as h2
> where idd='2002A00002';
>
> To ale neni pro definci view pouzitelne. Jak zapsat obecne vazbu idd ze
> subselektu do hlavniho dotazu ? Zkousel jsem misto subselektu pouzit left
> outer join, ale tam zase nejde omezit pocet radek historie.
>
> A jeste k optimalizaci view:
>
> Rekneme, ze udelam "select * from dkl where <podm>", kde <podm> lze
> vyhodnotit v puvodni tabulce doklad dle indexu. Prevede se v ramci view
> podminka do dotazu pro doklad ? Nedopadne to nahodou tak, ze se nejdrive
> udela "select * from doklad" a na kompletnim vyberu se spusti sekvencni
> vyber dle <podm> ?
>
> Jirka Borik <jiri.borik na volny.cz>
Další informace o konferenci Test