rekurzivni sql upit
03.02.2010. u 11:53 · pre 203 meseci
#1
Imam dve tabele:
Table1: Table2:
Tab1ID (pk) 1 --------->∞ Tab1ID (pk)
Tab2x (pk)
Table1:
1
2
3
5
6
9
Table2:
1 2
1 3
1 4
2 5
2 6
3 7
3 8
5 9
5 10
6 11
6 12
9 13
9 14
tabele su u relaciji preko polja tab1id, pri cemu postoji ogranicenje (da bi se izbegla zatvorena petlja)
da se tab2x ne moze naci u paru sa tab1ID gde je tab2x <= tab1ID.
treba mi requrzivni upit za vrednost 1 tabele 1 koji bi dao sledecii rezultat:
1 2
1 3
1 4
1 2 2 5
1 2 2 6
1 3 3 7
1 3 3 8
1 2 2 5 5 9
1 2 2 5 5 10
1 2 2 6 6 11
1 2 2 6 6 12
1 2 2 5 5 9 9 13
1 2 2 5 5 9 9 14
sledecim sql izrazom dobijam neki rezultat
SELECT Table1.Tab1ID,Table2.Tab2x,
Table1_1.Tab1ID, Table2_1.Tab2x,
Table1_2.Tab1ID, Table2_2.Tab2x,
Table1_3.Tab1ID, Table2_3.Tab2x
FROM ((((((Table1 INNER JOIN Table2 ON Table1.Tab1ID = Table2.Tab1ID)
LEFT JOIN Table1 AS Table1_1 ON Table2.Tab2x = Table1_1.Tab1ID)
LEFT JOIN Table2 AS Table2_1 ON Table1_1.Tab1ID = Table2_1.Tab1ID)
LEFT JOIN Table1 AS Table1_2 ON Table2_1.Tab2x = Table1_2.Tab1ID)
LEFT JOIN Table2 AS Table2_2 ON Table1_2.Tab1ID = Table2_2.Tab1ID)
LEFT JOIN Table1 AS Table1_3 ON Table2_2.Tab2x = Table1_3.Tab1ID)
LEFT JOIN Table2 AS Table2_3 ON Table1_3.Tab1ID = Table2_3.Tab1ID
WHERE Table1.Tab1ID=1
rezultat koji se dobije je sledeci:
1 2 2 5 5 9 9 13
1 2 2 5 5 9 9 14
1 2 2 5 5 10
1 2 2 6 6 11
1 2 2 6 6 12
1 3 3 7
1 3 3 8
1 4
ovde postoji jedan otezavajuci moment, u sql izrazu moguce je napisati odredjeni broj JOIN-a odnosno moguce je postaviti n-ti broj rekurzija.
ima li neko ideju o rekurziji sa nepoznatim brojem iteracija, stim da je taj broj iteracija ipak konacan.
Table1: Table2:
Tab1ID (pk) 1 --------->∞ Tab1ID (pk)
Tab2x (pk)
Table1:
1
2
3
5
6
9
Table2:
1 2
1 3
1 4
2 5
2 6
3 7
3 8
5 9
5 10
6 11
6 12
9 13
9 14
tabele su u relaciji preko polja tab1id, pri cemu postoji ogranicenje (da bi se izbegla zatvorena petlja)
da se tab2x ne moze naci u paru sa tab1ID gde je tab2x <= tab1ID.
treba mi requrzivni upit za vrednost 1 tabele 1 koji bi dao sledecii rezultat:
1 2
1 3
1 4
1 2 2 5
1 2 2 6
1 3 3 7
1 3 3 8
1 2 2 5 5 9
1 2 2 5 5 10
1 2 2 6 6 11
1 2 2 6 6 12
1 2 2 5 5 9 9 13
1 2 2 5 5 9 9 14
sledecim sql izrazom dobijam neki rezultat
SELECT Table1.Tab1ID,Table2.Tab2x,
Table1_1.Tab1ID, Table2_1.Tab2x,
Table1_2.Tab1ID, Table2_2.Tab2x,
Table1_3.Tab1ID, Table2_3.Tab2x
FROM ((((((Table1 INNER JOIN Table2 ON Table1.Tab1ID = Table2.Tab1ID)
LEFT JOIN Table1 AS Table1_1 ON Table2.Tab2x = Table1_1.Tab1ID)
LEFT JOIN Table2 AS Table2_1 ON Table1_1.Tab1ID = Table2_1.Tab1ID)
LEFT JOIN Table1 AS Table1_2 ON Table2_1.Tab2x = Table1_2.Tab1ID)
LEFT JOIN Table2 AS Table2_2 ON Table1_2.Tab1ID = Table2_2.Tab1ID)
LEFT JOIN Table1 AS Table1_3 ON Table2_2.Tab2x = Table1_3.Tab1ID)
LEFT JOIN Table2 AS Table2_3 ON Table1_3.Tab1ID = Table2_3.Tab1ID
WHERE Table1.Tab1ID=1
rezultat koji se dobije je sledeci:
1 2 2 5 5 9 9 13
1 2 2 5 5 9 9 14
1 2 2 5 5 10
1 2 2 6 6 11
1 2 2 6 6 12
1 3 3 7
1 3 3 8
1 4
ovde postoji jedan otezavajuci moment, u sql izrazu moguce je napisati odredjeni broj JOIN-a odnosno moguce je postaviti n-ti broj rekurzija.
ima li neko ideju o rekurziji sa nepoznatim brojem iteracija, stim da je taj broj iteracija ipak konacan.
Re: rekurzivni sql upit