SuperX

KontaktMail für InfosSuchenLogin

Rekursives Durchsuchen einer key-parent-Hierarchie

Postgres erlaubt auch rekursive Suche, hier ein Beispiel für das Organigramm:

with recursive org_rec (ebene,name,key_apnr,parent ,gueltig_seit,gueltig_bis,sort1)
as (select 1 as ebene,O.name, O.key_apnr,O.parent ,O.gueltig_seit,O.gueltig_bis,trim(O.key_apnr) as sort1
from organigramm O
where O.parent is null
and today() between O.gueltig_seit and O.gueltig_bis
union all (select R.ebene +1 as ebene,O2.name, O2.key_apnr,O2.parent ,O2.gueltig_seit,O2.gueltig_bis, R.sort1 || '_' || trim(O2.key_apnr)
from organigramm O2,org_rec R
where R.key_apnr=O2.parent
and today() between R.gueltig_seit and R.gueltig_bis
and today() between O2.gueltig_seit and O2.gueltig_bis
)
)
--search depth first by name set sort1
select ebene,trim(name) as name,trim(key_apnr) as key,trim(parent) as parent,trim(sort1) as sort1 from  org_rec
order by sort1;

ergibt z.B.

ebene |           name           |   key   | parent |       sort1
------+--------------------------+---------+--------+-------------------
1 | Universität              | 000     |        | 000
2 | Lehre Hochschule         | _9000   | 000    | 000__9000
3 | 01- WISO-Fakultät        | 01      | _9000  | 000__9000_01
3 | 02- Rechtswiss. F.       | 02      | _9000  | 000__9000_02
3 | 03- Medizinische F.      | 03      | _9000  | 000__9000_03
3 | 04- Philosophische F.    | 04      | _9000  | 000__9000_04
3 | 05- Math.-Nat. F.        | 05      | _9000  | 000__9000_05
3 | 06- Humanwiss. F.        | 06      | _9000  | 000__9000_06

Dieses Resultset könnte man direkt in Sichten als Quelle nutzen.