Podzapytanie SQL
Fantom - 20-01-2006 20:24
Podzapytanie SQL
Witam chcialbym zrobic zapytanie SQL w stylu SELECT x,y, (SELECT a,b,c,d from xxxx where yyyy itd) from aaa i dostac na wyjscie x,y,a,b,c,d. Podzapytanie jest bardzo skomplikowane pod wzgledem obliczniowym bazy - czyli trwa dlugo. No i teraz jak zrobic, aby dla kazdej pozycji glownej zapytania, tamto podzapytanie bylo liczone tylko raz i abym mogl z niego pobrac od razu kilka danych, a nie cos w stylu: SELECT x,y, (SELECT a from xxxx where yyyy itd), (SELECT b from xxxx where yyyy itd) (SELECT c from xxxx where yyyy itd) (SELECT drom xxxx where yyyy itd) from aaa
Fantom
Sergiusz Rozanski - 20-01-2006 20:24
Dnia 20.01.2006 Fantom <szczukot@skasujto.poczta.onet.pl> napisał/a: > Witam > chcialbym zrobic zapytanie SQL w stylu > SELECT x,y, (SELECT a,b,c,d from xxxx where yyyy itd) > from aaa > i dostac na wyjscie x,y,a,b,c,d. > Podzapytanie jest bardzo skomplikowane pod wzgledem obliczniowym bazy - > czyli trwa dlugo. No i teraz jak zrobic, aby dla kazdej pozycji glownej > zapytania, tamto podzapytanie bylo liczone tylko raz i abym mogl z niego > pobrac od razu kilka danych, a nie cos w stylu: > SELECT x,y, > (SELECT a from xxxx where yyyy itd), > (SELECT b from xxxx where yyyy itd) > (SELECT c from xxxx where yyyy itd) > (SELECT drom xxxx where yyyy itd) > from aaa
może wydajniej widoczek lub:
create temorary table x as select
i dalej już normalny join jaki tam potrzebujesz? gdy nie ma w podselectach elementów z wierszy głównego zapytania, to tak będzie lepiej. Nawet gdy są w podzapytaniu wiersze, ale pozdazpytanie stanowi ułamek tabeli głównej to i tak często tymczasowa tabela lub widok działa wydajniej.
-- *** rozanski.at.sergiusz.dot.com sq3bkn *** *** http://jeep.comm.pl *** *** rtg project http://gg.overwap.net ***
Marcin Mańk - 20-01-2006 20:24
> Witam > chcialbym zrobic zapytanie SQL w stylu > SELECT x,y, (SELECT a,b,c,d from xxxx where yyyy itd) > from aaa > i dostac na wyjscie x,y,a,b,c,d.
nie podałeś jaka to baza. I jeszcze podaj, czy to podzapytanie jest skoreloweane (czy jest w nim używana tabela aaa).
Proste, 'czołgowe' rozwiązanie to:
SELECT x,y, (SELECT sklej_do_stringu(a,b,c,d) from xxxx where yyyy itd) from aaa
I później obrabianie tego w kliencie.
Pozdrawiam Marcin Mańk
Fantom - 20-01-2006 20:24
> nie podałeś jaka to baza. I jeszcze podaj, czy to podzapytanie jest
Sybase, ale szukam ogolnego rozwiazania SQL a potem bede patzral czy Sybase to obsluguje.
> skoreloweane (czy jest w nim używana tabela aaa).
Jest
> Proste, 'czołgowe' rozwiązanie to: > > SELECT x,y, (SELECT sklej_do_stringu(a,b,c,d) from xxxx where yyyy itd) > from aaa
No fakt :) ale troche toporne. Ale ....
Fantom
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 20-01-2006 20:24
Fantom wrote: > Witam > chcialbym zrobic zapytanie SQL w stylu > SELECT x,y, (SELECT a,b,c,d from xxxx where yyyy itd) > from aaa > i dostac na wyjscie x,y,a,b,c,d. > Podzapytanie jest bardzo skomplikowane pod wzgledem obliczniowym bazy - > czyli trwa dlugo. No i teraz jak zrobic, aby dla kazdej pozycji glownej > zapytania, tamto podzapytanie bylo liczone tylko raz i abym mogl z niego > pobrac od razu kilka danych, a nie cos w stylu: > SELECT x,y, > (SELECT a from xxxx where yyyy itd), > (SELECT b from xxxx where yyyy itd) > (SELECT c from xxxx where yyyy itd) > (SELECT drom xxxx where yyyy itd) > from aaa
Podzapytanie jest wykonywane tylko raz w dwóch wypadkach. Gdy jest w klauzuli FROM, lub w warunku IN. W twoim przypadku możesz spróbować przerzucić podzapytanie i połączyć jego wyniki z tabelą aaa - czy będzie to szybciej nie wiem, ale powinno. Być może będzie trzeba przepisać podzapytanie, żeby było wydajne w takiej formie. Ja podzapytania prawie zawsze umieszczam w FROM (czasami w WHERE) i jak dotychczas ten sposób się sprawdzał.
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.pllatwa-kasiora.pev.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 |
|