martedì 29 gennaio 2013

Query Ricorsive

Un brevissimo post per vedere come effettuare una query "ricorsiva" ( se così si può chiamare...) su una tabella di un DataBase MSSQL.

La situazione:

In una tabella ci sono i seguenti campi:
  • father
  • code
E' una tipica tabella per la creazione di strutture ad albero.

Quindi data la struttura seguente:



  • ARTICOLO VENDITA
    • Sub Articolo 1
    • Sub Articolo 2
      • Sub Articolo 2-1
      • Sub Articolo 2-2
    • Sub Articolo 3
      • Sub Articolo 3-1
        • Sub Articolo 3-1-1
avremo una tabella strutturata nel seguente modo:


fathercode
ARTICOLO VENDITASub Articolo 1
ARTICOLO VENDITASub Articolo 2
ARTICOLO VENDITASub Articolo 3
Sub Articolo 2Sub Articolo 2-1
Sub Articolo 2Sub Articolo 2-2
Sub Articolo 3Sub Articolo 3-1
Sub Articolo 3-1Sub Articolo 3-1-1

Ora, data tale struttura, andiamo a costruire una query un pò particolare che possa dare come risultato una tabella come la precedente andando a selezionare solo il codice di vendita principale "ARTICOLO VENDITA".

Di seguito la query:


With BOM (Parent,Child,Level) As
(
Select T0.Father Parent,T0.Code Child, 0 Level
From TABLE T0
Where T0.Father = 'ARTICOLO VENDITA'
Union All
Select T1.Father,T1.Code,Level+1
From TABLE T1
  Inner join BOM T2 on T1.Father=T2.Child
)

Select T4.*
From BOM T4
Option (MAXRECURSION 10)

In questo modo, siamo in grado di estrarre tutti i dati della struttura ad albero, visualizzati in tabella , interrogando il DB solo con il nome del "ARTICOLO VENDITA".

Nessun commento:

Posta un commento

Grazie per aver scritto.

Il tuo commento sarà pubblica appena approvato dall'amministratore del blog.