Recursive Query

Dann muß aber die 2 bei 6 und nicht bei 1 sein, oder?

Code:
test=*# select * from bauteile ;
id | bauteil | vorprodukt
----+---------+------------
  1 | a  |
  2 | b  |  1
  3 | c  |  1
  4 | d  |
  5 | e  |  4
  6 | f  |  1
  7 | g  |  6
(7 rows)

test=*# select vorprodukt, max(tiefe) from (with recursive r as (select b.id, b.bauteil, b.vorprodukt, 1::int as tiefe from bauteile b where vorprodukt is not NULL union all select b.id, b.bauteil, b.vorprodukt, r.tiefe+1 from bauteile b join r on b.vorprodukt=r.id) select * from r) foo group by vorprodukt;
vorprodukt | max
------------+-----
  4 |  1
  1 |  1
  6 |  2
(3 rows)
ne bei der 1 müssen 2 eben darunter sein und bei der 4 und 6 jeweils 1 ebene
da ja 7 vorprodukt von 6 ist und 6 von 1 das macht 2 ebenen
und 4 hat ja nur die 5 als vorprodukt -> eine ebene
 
Zuletzt bearbeitet:
Werbung:
Code:
test=*# select vorprodukt, max(tiefe) from (with recursive r as (select b.id, b.bauteil, b.vorprodukt, 1::int as tiefe from bauteile b where vorprodukt is not NULL union all select b.id, b.bauteil, b.vorprodukt, r.tiefe+1 from bauteile b join r on r.vorprodukt=b.id) select * from r) foo where vorprodukt is not null group by vorprodukt;
 vorprodukt | max
------------+-----
  4 |  1
  1 |  2
  6 |  1
(3 rows)
 
Werbung:
das foo ist ein Alias für die im inneren erstellte Tabelle, das 1::int ist eine Variable, die im Resultat als eine INT-Spalte erscheint und 'tiefe' wieder als Namen erhält. Das "M$SQL Server" von Dir ist heilbar, da bin ich mir sicher ;-)
 
Zurück
Oben