Avatar billede hrc Mester
15. september 2004 - 13:20 Der er 6 kommentarer og
1 løsning

SQL-query. Hierarkisk traversering af tabel.

Jeg har en tabel med felterne

  ID, SubID ...

SubID peger tilbage til ID hvorved man får en hierarkisk struktur. Jeg mangler en SQL-query til at få en liste af alle niveauer:

  45, 22
  45, 32
  22, 12
  12, null
  32, 09
  09, null // osv.

Er der en SQL-haj der kan strikke sådan et script sammen (Mangler vi en SQL-tråd på Eksperten)?
Avatar billede borrisholt Novice
15. september 2004 - 14:05 #1
Jeg er ikke helt med ...

"SubID peger tilbage til ID" betydende at 45,22 peger ned på 22,12 ?

Hvad vil du så gerne have som resultat ?

jens B
Avatar billede hrc Mester
15. september 2004 - 14:12 #2
Hej Jens - Det er korrekt forstået 22 er fremmednøgle til record 22. Resultatet må gerne være noget lignende det jeg viste ovenfor. Noget med at hver gren stopper ved en nullet SubID.
Avatar billede borrisholt Novice
15. september 2004 - 15:03 #3
Nu er jeg ikke den vildeste hest på marken, men prøv det her :

Declare @external_loop int
Declare @ref_id int
Declare @old_ref_id int
Declare @referencel_loop int

Declare #large_cur cursor  for  Select id, subid from HEST (nolock)
Open #large_cur

Fetch next from #large_cur into @referencel_loop, @external_loop

Set @ref_id = @external_loop

While @@fetch_status = 0
Begin
  While IsNull(@ref_id, -1) <> -1
    Begin
      Set @old_ref_id = @ref_id
      Select  @ref_id = subid from HEST (nolock) where id = @ref_id
      Print convert(varchar, @old_ref_id) + ', ' + convert(varchar, @ref_id)
    End
  Fetch next from #large_cur into @referencel_loop, @external_loop
End

Close #large_cur
Deallocate #large_cur


Jens B
Avatar billede hrc Mester
15. september 2004 - 18:05 #4
Det kan godt være at det virker - det ligner lidt den kode jeg har i Delphi - og som jeg, af ydelseshensyn, gerne vil samle i én query. Hvilken database er det i? Det er vel ikke PAL-source, vel?

Jeg er næsten 100% sikker på at jeg har set en query der klarede sådan noget i et hug
Avatar billede borrisholt Novice
16. september 2004 - 08:04 #5
Det jeg har skrevet her er REN SQL, det kan du bare stoppe direkte ind i en TQuery, og exekvere.

Sproget der er brugt er TSQL, mod en MS - SQL Server. Hvis ikke du skal køre det på en SQL server er jeg blank, og ville være nød til at lave det i PASCAL.

Jens B
Avatar billede hrc Mester
25. oktober 2004 - 13:44 #6
Hej Jens - jeg løste aldrig mit problem men fandt dog et eksempel fra en Oracle-database der returnerede noget der lignede et hierarkisk dataset.
Avatar billede hrc Mester
25. oktober 2004 - 13:45 #7
Derfor lukker jeg spg.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester