Me lo segno.
Stare troppo su Sql server nella versione 2000 ti fa perdere di vista le novità del più potente 2005. Eccomi dunque a segnarmi una memo sul modo più veloce e prestazionale per eseguire una query ricorsiva sul mio blog.
A che serve una query ricorsiva? La risposta più semplice è nel caso della struttura ad albero memorizzato in una tabella il poter avere tutti i figli di un determinato ramo. Ecco il caso di una tabella:
id | id_padre | nome |
1 | 0 | a |
2 | 1 | aa |
3 | 1 | ab |
4 | 2 | aaa |
5 | 2 | aab |
6 | 4 | aaaa |
7 | 3 | aba |
8 | 3 | abb |
9 | 7 | abaa |
L'albero è semplice, il padre è "a", e i figli seguono l'ordine alfabetico. Ora, se volessi sapere tutti i figli e nipoti di aa, con sql server 2005, posso scrivere:
with tree(id,id_padre,nome) as ( select id,id_padre,nome from albero where id=2 -- id del padre union all select a.id,a.id_padre,a.nome from albero a inner join tree t on t.id=a.id_padre ) select id,id_padre,nome from tree
Molto più semplice e veloce che la costruzione di una funzione apposita...
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- SqLite vs Access vs Sql Ce 3.5, il 24 ottobre 2009 alle 21:23