PGSQL - odwołanie się do wyniku "w locie"
Andrzej Stróżyński - 24-10-2005 19:53
PGSQL - odwołanie się do wyniku "w locie"
Witam. Czy zapytanie może odwołać się do swojego wyniku? Np.:
SELECT pole1, strpos(pole2, 'x') AS wynik, substr(pole2,1,wynik) FROM ...
To tylko wydumany przykład ale myślę, że oddaje sedno sprawy. Takie zapytanie kończy się oczywiście komunikatem błędu o braku pola "wynik" ale może jest jakiś sposób aby nie było trzeba w jednym zapytaniu wielokrotnie wyliczać tych samych formuł?
Z góry dziękuję AS.
PS. Jak widać nie taki ze mnie AS ;-)
Jester - 25-10-2005 10:58
Andrzej Stróżyński napisał(a):
> Czy zapytanie może odwołać się do swojego wyniku? Np.: > > SELECT pole1, strpos(pole2, 'x') AS wynik, substr(pole2,1,wynik) FROM ... > > To tylko wydumany przykład ale myślę, że oddaje sedno sprawy. > Takie zapytanie kończy się oczywiście komunikatem błędu o braku pola > "wynik" ale może jest jakiś sposób aby nie było trzeba w jednym > zapytaniu wielokrotnie wyliczać tych samych formuł?
Aliasu kolumny można użyć tylko w sekcji order by - w każdym innym miejscu serwer zaprotestuje. W przypadku bardziej skomplikowanych działań można posłużyć się UDFem, którego powtórne wywoływanie jest bardziej przejrzyste niż przepisywanie tych samych obliczeń. W tak trywialnym przypadku jak w podanym przykładzie jedynym sensownym wyjściem jest chyba jednak powtórzenie wyrażenia...
-- Pozdrawiam Jester
Adam Buraczewski - 25-10-2005 10:58
Andrzej Stróżyński <astrozynski@poczta_dot_onet.pl> wrote: > Witam. > Czy zapytanie może odwołać się do swojego wyniku? Np.: > > SELECT pole1, strpos(pole2, 'x') AS wynik, substr(pole2,1,wynik) FROM ...
Nie może, ale może po prostu użyj czegoś takiego:
SELECT pole1, wynik, substr(pole2, 1, wynik) FROM ( SELECT pole1, pole2, strpos(pole2, 'x') as wynik FROM ... -- tu to co miałeś dotąd jako "..." ) AS x;
W Postgresie możesz użyć podzapytania we FROM, tylko trzeba określić jakiś alias do niego.
Pozdrawiam!
-- Adam Buraczewski <adamb (at) nor (dot) pl> * Linux user #165585 GCS/TW d- s-:+>+:- a C+++(++++) UL++++$ P++ L++++ E++ W+ N++ o? K w-- O M- V- PS+ !PE Y PGP+ t+ 5 X+ R tv- b+ DI D G++ e+++>++++ h r+>++ y?
Andrzej Stróżyński - 25-10-2005 10:58
Użytkownik "Adam Buraczewski" <adamb@mielonka.nor.pl> napisał w wiadomości news:qodv23-k22.ln1@adamb.at.nor.pl... > Andrzej Stróżyński <astrozynski@poczta_dot_onet.pl> wrote: >> Witam. >> Czy zapytanie może odwołać się do swojego wyniku? Np.: >> >> SELECT pole1, strpos(pole2, 'x') AS wynik, substr(pole2,1,wynik) FROM >> ... > > Nie może, ale może po prostu użyj czegoś takiego: > > SELECT pole1, wynik, substr(pole2, 1, wynik) FROM ( > SELECT pole1, pole2, strpos(pole2, 'x') as wynik FROM > ... -- tu to co miałeś dotąd jako "..." > ) AS x; > > W Postgresie możesz użyć podzapytania we FROM, tylko trzeba określić > jakiś alias do niego. > dziękuję za pomoc
A.S.
Grzegorz Szyszlo - 27-10-2005 23:55
Adam Buraczewski napisał(a): > Andrzej Stróżyński <astrozynski@poczta_dot_onet.pl> wrote: > >>Witam. >>Czy zapytanie może odwołać się do swojego wyniku? Np.: >> >>SELECT pole1, strpos(pole2, 'x') AS wynik, substr(pole2,1,wynik) FROM ... > > > Nie może, ale może po prostu użyj czegoś takiego: > > SELECT pole1, wynik, substr(pole2, 1, wynik) FROM ( > SELECT pole1, pole2, strpos(pole2, 'x') as wynik FROM > ... -- tu to co miałeś dotąd jako "..." > ) AS x; > > W Postgresie możesz użyć podzapytania we FROM, tylko trzeba określić > jakiś alias do niego.
Heh... a ja do takich rzeczy na siłę używałem widoków, i zastanawiałem się jak to zapisać wprost. dzięki za świetną radę :)
tak wiem wiem. z niczym jest to niekompatybilne. ale takie rzeczy w źródłach zawsze należy odpowiednio komentować.
znik.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[pgsql] Akcja w =?iso-8859-2?b?emFsZb9ub7ZjaQ==?= od liczby zmienionych =?iso-8859-1?q?rekord=F3w?=
[sql][pgsql] zapytanie sql
[pgsql] Wykonanie triggera po =?ISO-8859-2?Q?zako=F1czeniu_tra?==?ISO-8859-2?Q?nsakcji?=
[pgsql] =?ISO-8859-2?Q?Prawid=B3owe_post=EApowanie_w_przyp?==?ISO-8859-2?Q?adku_awarii?=
[PGSQL] Funkcje =?ISO-8859-2?Q?zwracaj=B1ce_=27rowset=27_i_?==?ISO-8859-2?Q?tabele_tymczasowe?=
[pgsql] 7.4 =?ISO-8859-2?Q?og=B3upia=B3_przy_zak=B3adaniu_?==?ISO-8859-2?Q?indeksu?=
[pgsql] Zmiana schematu do =?ISO-8859-2?Q?kt=F3rego_nalezy_o?==?ISO-8859-2?Q?biekt=2E?=
Która z baz: [PGSQL] czy [MySQL] będzie lepsza w takim zastosowaniu (masowe UPDATE)
PL/pgSQL jak =?ISO-8859-2?Q?u=BFy=E6_transakcji=2E?=
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|