Det er vidst nok muligt, men bøvlet, med simple operationer. Vil anbefale du kigger på de mere avancerede funktionaliter i dit databasesystem. Her er en version med postgresql's WITH RECURSIVE (som faktisk er iterativt):
- WITH RECURSIVE search(AL, depth) AS (
- VALUES('PRM2G5H11N', 0)
- UNION ALL
- SELECT mt.EL, depth + 1
- FROM myTable mt, search s
- WHERE s.AL = mt.AL AND (depth + 1) <= 5
- )
-
- SELECT *
- FROM search;
Den fungerer som en for løkke. Først vælger vi startdelen som ikke må afhænge af search, her din givne AL og den dybde vi fandt den på. Denne værdi bliver lagt i en skjult resultat-tabel samt i en arbejdstabel.
1. Så længe arbejdstabellen ikke er tom.
2. Lav en ny iteration (delen under UNION ALL). Her vælger vi de EL'er vi kan komme fra de nuværende AL'er i arbejdstabellen. Search svarer til arbejdstabellen når der SELECTes.
3. Resultatet af dette bliver lagt oveni resultatstabellen samt bliver til den nye arbejdstabel.
4. Gå tilbage til 1.
Læg mærke til at iterationen stopper når vi har kørt iteration 5 gange (sat i koden) fordi så bliver det nye resultat tomt, dermed arbejdstabellen bliver tom og iterationen er slut:
AL, depth (i search)PRM2G5H11N 0
#1 iterationPRICG5B11T 1
#2 iterationPRCJG5912T 2
PRCJG5913T 2
#3 iteration215356 3
215355 3
Alle de forrige iterationer ligger som sagt i resulttabellen.
Jeg har en sqlfiddle her med det, men har alligevel lagt koden her siden sqlfiddlen kan blive 'fiddlet' med.
http://sqlfiddle.com/#!1/0c417c/17/0Hvis du kun vil have AL kolonnon trækker du bare kun den ud:
- SELECT AL
- FROM search
Indlæg senest redigeret d. 12.06.2013 14:04 af Bruger #14645