ďťż
 
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?= ďťż
 
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=



Filip Sielimowicz - 02-01-2006 12:07
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
  Przykładowo: mamy w tabeli zapisane elementy drzewa/wielu drzew.
Drzewo jest zapisane w tabeli w naturalnej, najprostszej postaci:

CREATE TABLE tree (
id integer,
pid integer,
CONSTRAINT pk_node PRIMARY KEY(id),
CONSTRAINT fk_super_node FOREIGN KEY(pid)
REFERENCES node(id)
)

Zadanie: mamy dowolny element drzewa, mamy wyświetlić id korzenia'a
tego drzewa.
Rozwiązanie: standardy sql o ile wiem, nie przewidują
operacji na strukturach rekurencyjnych, więc wykonanie
zadania wymaga np. napisania procedury wbudowanej, która
do rozwiązana problemu skorzysta z iteracji.

Natomiast w wielu bazach danych rozwiązano ten problem wychodząc
poza standardy sql'a.

W ibm db2 do tego celu wykorzystuje się konstrukcję łączącą
with(tworzenie tabeli tymczasowej) i union all(łączenie tabeli
tymczasowej samej ze sobą):

with
rr (id,pid) as (
select tr.id, tr.pid from tree tr where tr.id=1
union all
select tt.id,tt.pid from tree tt, rr
where tt.id = rr.pid
)
select id from rr where rr.pid is null

W Oracle do zapytań rekurencyjnych, o ile sięorientuję,
wykorzystuje się konstrukcje start with ... connect by.

Czy mssql oferuje coś podobnego ?





Filip Sielimowicz - 02-01-2006 12:07
=?iso-8859-2?Q?Re:_=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia?==?iso-8859-2?Q?_sql_co=B6_takiego_przewiduje_=3F?=
 
Użytkownik "Filip Sielimowicz" <sielim@poczta.onet.pl> napisał w wiadomości
news:dp9ahu$qt7$1@news.onet.pl...

> with
> rr (id,pid) as (
> select tr.id, tr.pid from tree tr where tr.id=1
> union all
> select tt.id,tt.pid from tree tt, rr
> where tt.id = rr.pid
> )
> select id from rr where rr.pid is null
>
> W Oracle do zapytań rekurencyjnych, o ile sięorientuję,
> wykorzystuje się konstrukcje start with ... connect by.
>
> Czy mssql oferuje coś podobnego ?

Rzut oka na
http://www.sqlservercentral.com/colu...server2005.asp
mówi mi, że w mssql'u jest podobnie jak w db2, w dodatku zdaje się, że jest
to
już zapisane w standardzie ISO SQL:1999.




keczerad - 02-01-2006 12:07
=?ISO-8859-2?Q?Re=3A_=5Bmssql=5D_Zapytania_rekurencyjne_?==?I SO-8859-2?Q?_-_czy_sk=B3adnia_sql_co=B6_takiego_przewid?==?ISO-8859-2?Q?uje_=3F?=
  Filip Sielimowicz napisał(a):
> Czy mssql oferuje coś podobnego ?

kursory = petla w TSQL

--

keczerad

http://www.e-mo.com.pl
sklep w (X)HTML




keczerad - 02-01-2006 12:07
=?ISO-8859-2?Q?Re=3A_=5Bmssql=5D_Zapytania_rekurencyjne_?==?I SO-8859-2?Q?_-_czy_sk=B3adnia_sql_co=B6_takiego_przewid?==?ISO-8859-2?Q?uje_=3F?=
  keczerad napisał(a):
> Filip Sielimowicz napisał(a):
>
>> Czy mssql oferuje coś podobnego ?
>
>
>
> kursory = petla w TSQL
>

bodajze w MSSQL 2005 rekurencja jest wbudowana, ale tego nie jestem pewien.

--

keczerad

http://www.e-mo.com.pl
sklep w (X)HTML





Artur Muszynski - 02-01-2006 12:07

  > kursory = petla w TSQL

Odczep się od kursorów. Pytający umie to rozwiązać za pomocą pętli i imho
najlepiej opakować to w funkcję i wystarczy.
SELECT id,dbo.root(@id) FROM t

artur

>
> --
>
> keczerad
>
> http://www.e-mo.com.pl
> sklep w (X)HTML




keczerad - 02-01-2006 12:07
=?ISO-8859-2?Q?Re=3A_=5Bmssql=5D_Zapytania_rekurencyjne_?==?I SO-8859-2?Q?_-_czy_sk=B3adnia_sql_co=B6_takiego_przewid?==?ISO-8859-2?Q?uje_=3F?=
  Artur Muszynski napisał(a):
>
>
> Odczep się od kursorów. Pytający umie to rozwiązać za pomocą pętli i imho
> najlepiej opakować to w funkcję i wystarczy.
> SELECT id,dbo.root(@id) FROM t
>

wg mnie nie da sie tego zrobic w funkcji bez kursora, rekurencja to cos
co znajdzie odpowiedz w 1,2,3 ... n iteracjach wiec zwyklym zapytaniem
bez kursora tego nie zrobisz.

--

keczerad

http://www.e-mo.com.pl
sklep w (X)HTML




Vez do Han - 02-01-2006 12:07
=?iso-8859-2?Q?Re:_=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia?==?iso-8859-2?Q?_sql_co=B6_takiego_przewiduje_=3F?=
  Użytkownik "keczerad" <keczerad@poczta.fm> napisał w wiadomości
news:dp9nuf$k2c$1@atlantis.news.tpi.pl...
> Artur Muszynski napisał(a):
> >
> >
> > Odczep się od kursorów. Pytający umie to rozwiązać za pomocą pętli i
imho
> > najlepiej opakować to w funkcję i wystarczy.
> > SELECT id,dbo.root(@id) FROM t
> >
>
> wg mnie nie da sie tego zrobic w funkcji bez kursora, rekurencja to cos
> co znajdzie odpowiedz w 1,2,3 ... n iteracjach wiec zwyklym zapytaniem
> bez kursora tego nie zrobisz.
>

Noo, bez kursora, w pętli while (no jescze tabelka z # mi się pojawi)
zrobię.




szaman - 02-01-2006 12:07

  >
>bodajze w MSSQL 2005 rekurencja jest wbudowana, ale tego nie jestem pewien.

Zgadza się.

http://www.sqlservercentral.com/colu...server2005.asp
--
{67B14976-ABB4-4A3B-869B-84B5CCA1F569}
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [oracle] - Oracle SQL Developer - co to jest SID? MS Sql Server 2000 i Server 2003 [MS SQL + kontakty outlook]CZy kontakty moge być zewnętrzne? [oracle] Baza danych do kursy Introduction to Oracle9i:PL/SQL ? Skąd ją pobrać ? ms sql 2000 i ms server 2003 problem z logowaniem [MS SQL 2000] - wielkosc strony danych a wielkosc klastra dyskowego mecze sie i mecze i nic - zapytanie czesciowe [MS SQL 2005] =?windows-1250?Q?Ilo=9C=E6_wiersz=F3w_w_zbiorze_wynikowym?= [ms sql] Przeniesienie bazy z wszystkimi dodatkami (dts, jobs, replikacja) na inny server ? konkurs SQL Injection - 10 PLN na GSM dla pierwszej osoby, ktora dostanie sie do bazy
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunadance.htw.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com