MySQL WITH



  • Gibt es bei MySQL 5 WITH-Rekursion ???

    also

    WITH RecRel (eltern, kind, name) AS (
    SELECT init.eltern, init.kind, init.name
    FROM baum AS init
    WHERE init.eltern='2'
    
    UNION all
    
    SELECT stl.eltern, stl.kind, stl.name
    FROM RecRel AS rec, baum AS stl
    WHERE rec.kind = stl.eltern
    
    ) SELECT  DISTINCT *
    FROM RecRel;
    

    Ich habe es auf SQL Server 2007 ausprobiert. Es funktioniert.

    Weist jemand ob so eine Abfrage beim MySQL 5 (also WITH) funktionieren würde? 😕



  • Ich kenne WITH nicht, aber ich rate einfach mal. WITH ist

    Bei der Abfrage erzeugst Du mittels UNION ALL ein Ergebnisset, aus dem Du dann mittels SELECT DISTINCT die doppelten entfernst. Weißt Du eigentlich, was das ALL nach UNION bewirkt? UNION ohne ALL liefert keine doppelten. Mit ALL bekommst Du die doppelten, die Du mit dem äusseren SELECT wieder entfernst:

    SELECT init.eltern, init.kind, init.name
       FROM baum AS init
      WHERE init.eltern='2'
    UNION
     SELECT stl.eltern, stl.kind, stl.name
       FROM RecRel AS rec, baum AS stl
      WHERE rec.kind = stl.eltern
    

    Wenn ich das WITH richtig verstehe ist es auch identisch mit:

    SELECT  DISTINCT *
      FROM (
        SELECT init.eltern, init.kind, init.name
          FROM baum AS init
         WHERE init.eltern='2'
    
        UNION all
    
        SELECT stl.eltern, stl.kind, stl.name
          FROM RecRel AS rec, baum AS stl
         WHERE rec.kind = stl.eltern
    ) AS tab1;
    

    Wobei ich nicht weiß, ob Mysql das kann.

    Tntnet


Anmelden zum Antworten