with groups as (select groupid , groupname , parentid from ext_groups) select ig0.groupid groupid_level0 , ig0.groupname groupname_level0 , ig1.groupid groupid_level1 , ig1.groupname groupname_level1 , ig2.groupid groupid_level2 , ig2.groupname groupname_level2 , ig3.groupid groupid_level3 , ig3.groupname groupname_level3 , ig4.groupid groupid_level4 , ig4.groupname groupname_level4 from -- Root-Ebene (select * from groups where parentid = 0 ) ig0 -- Ebene 1 , (select * from groups ) ig1 -- Ebene 2 , (select * from groups ) ig2 -- Ebene 3 , (select * from groups ) ig3 -- Ebene 4 (= Branch-Ebene) , (select * from groups ) ig4 where ig1.parentid = ig0.groupid and ig2.parentid = ig1.groupid and ig3.parentid = ig2.groupid and ig4.parentid = ig3.groupid order by ig0.groupid , ig1.groupid , ig2.groupid , ig3.groupid , ig4.groupid
Dabei werden die relevanten Spalten der Basistabelle (in diesem Fall eine external table) ext_groups über subquery factoring als groups verfügbar gemacht, dann auf Root-Ebene alle Elemente mit der parentId 0 ausgewählt (hier könnte natürlich auch ein NULL-Wert stehen) und anschließend alle weiteren Ebenen über Joins
Keine Kommentare:
Kommentar veröffentlichen