SQL Rekursion



  • Hallo,
    ich habe eine MySQL Datenbank mit folgende Tabellen:

    -------------------------
    ORDNER | ELTERN | KIND
    -------------------------
    root......| NULL ... | 1
    a_1.......| 1 ....... | 2
    a_2.......| 1 ....... | 3
    a_3.......| 1 ....... | 4
    b_1.......| 2 ....... | 5
    b_2.......| 2 ....... | 6
    b_3.......| 2 ....... | 7
    c_1.......| 4 ....... | 8
    d_1.......| 3 ....... | 55
    d_2.......| 3 ....... | 122

    Es siet ungeführ so aus:

    root_
    ...... | - a_1 _
    .................. | - b_1
    .................. | - b_2
    .................. | - b_3

    ...... | - a_2 _
    .................. | - d_1
    .................. | - d_2
    ............................................ // also hier können mehrere Unterordner kommen, oder Unter - Unterordner und soweiter.

    ...... | - a_3 _
    .................. | - c_1

    Wie kann ich eine Rekursive SQL-Abfrage aufbauen, damit man für einen Ordner (z.B a_2) alle Unterordner bekommt? 😕

    ⚠ Es können aber beliebig viele unter - unter Ordner in d_1 und d_2 ect. sein. Also die Verschachtelung ist nicht vorhersehbar!



  • Unter Oracle geht das mit einem "select ... connect by" Statement. Vielleicht gibts das auch bei MySQL.



  • Das ganze ist ja nichts anderes als eine relationstabelle, soll heißen
    wenn du alle "KIND" eines "ELTERN" bekommen möchtest könnte das so aussehen:

    SELECT [table_name].KIND
    FROM [table_name]
    WHERE [table_name].ELTERN = [eltern_id];
    

    also z.B.:

    SELECT [table_name].KIND
    FROM [table_name]
    WHERE [table_name].ELTERN = 2;
    


  • die meisten sql implementationen können sowas nicht

    aber google hilft, mit "Modified Preorder Tree Traversal" kann man des z.b. machen


Anmelden zum Antworten