Announcement

Collapse
No announcement yet.

SQL Rekursiv

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Rekursiv

    Hallo zusammen,

    brauche eine kleine Richtungsanweisung oder auch paar Zeilen. Wie kann ich einen einzelnen Insert-Ausdruck mit einer rekursivenAnfrage, welches eine Tabelle mit den korrekten Daten befüllt erstellen?

    Gruß
    Torsten

  • #2
    Wie kann ich einen einzelnen Insert-Ausdruck mit einer rekursivenAnfrage
    Das heißt genau was?


    welches eine Tabelle mit den korrekten Daten befüllt
    Was bedeutet hier korrekt?


    oder auch paar Zeilen
    Dann musst du wohl die Beschreibung der Tabellen und Spalten liefern


    Welche Datenbank wird genutzt?
    Christian

    Comment


    • #3
      PostgreSQL Datenbank,
      ich schreibe hier die Zeilen die ich bereits habe, hier muss ich noch den Rekursiv Anfrage rein:

      INSERT INTO table1( (v1no) (
      WITH RECURSIVE CTE (m,nutzung, depth) AS (
      SELECT v.m, v.nutzung, 0
      FROM Vorgabe AS v
      WHERE m = 1

      UNION ALL
      **rekursiver Teil
      SELECT v.m, v.nutzung, c.depth + 1
      FROM Vorgabe AS v
      JOIN FFE AS c ON v.nutzung = c.m

      )
      SELECT COUNT(depth)
      FROM FFE
      GROUP BY depth
      ORDER BY DEPTH

      das Problem hier ist dass das nicht terminiert, ich mache irgendwo ein Fehler...
      Zuletzt editiert von maldus; 19.12.2018, 22:29.

      Comment


      • #4
        Es ist generell eine nicht so prickelnde Idee, etwas nicht funktionierendes zu posten, um eine Idee zu transportieren. Da helfen ein paar erklärende Worte zum Ausgangszustand und Ziel sicherlich.
        Hilfreich für mich und vielleicht auch andere ist bspw. ein formatiertes Statement.

        Für die Funktion kannst Du die Insert Clause auch solange weglassen, bis Dein gewünsches Ergebnis selektiert wird.
        Ich zweifel ja daran, ob Du wirklich Rekursion brauchst. Vielleicht tut es ein simples generateseries.

        Hier ist ein Beispiel, anhand dessen Du Dir vielleicht Dein eigenes Statement gerade rücken kannst:
        https://stackoverflow.com/questions/...701124#5701124

        Comment


        • #5
          Es ist halt eine Aufgabe die ich lösen muss, ohne die rekursiver Teil funktioniert es auch... Nur das mit dem rekursiven klappt das nicht. Ich dachte ich habe eventuell nen denkfehler gemacht, daher habe ich das ganze gepostet

          Comment


          • #6
            Ja, wie blöd, was macht man da?
            Einzelne Schritte testen, Beispiele ausprobieren, .. ?
            Ich hab Dir hier mal ein Beispiel aus der Postgres Doku her kopiert:
            Code:
               with RECURSIVE t(n) as
                  (values(1)
            
                   union all
            
                   select n + 1 from t where n < 100)
            select sum(n) from t;
            das kannst Du ja mal vergleichen mit Deinem Code Klumpen.
            Ich helf Dir:
            INSERT INTO table1( (v1no) (
            WITH RECURSIVE CTE (m,nutzung, depth) AS (
            SELECT v.m, v.nutzung, 0
            FROM Vorgabe AS v
            WHERE m = 1

            UNION ALL
            **rekursiver Teil
            SELECT v.m, v.nutzung, c.depth + 1
            FROM Vorgabe AS v
            JOIN FFE AS c ON v.nutzung = c.m

            )
            SELECT COUNT(depth)
            FROM FFE
            GROUP BY depth
            ORDER BY DEPTH

            nein warte, nicht hinschauen!

            jetzt:
            Code:
            with RECURSIVE CTE(m, nutzung, depth) as
             (select v.m, v.nutzung, 0
                from Vorgabe as v
               where m = 1
            
              union all ** rekursiver Teil
            
              select v.m, v.nutzung, c.depth + 1
                from Vorgabe as v
                join FFE as c
                  on v.nutzung = c.m
            
              )
            select count(depth) from FFE
             group by depth
             order by DEPTH

            Comment

            Working...
            X