CTE problem

halloechen …

es geht um CTE … mir ist das noch recht neu, weil ich es bisher eher vermieden habe - aber nun will ich sie für “kleine baeume” verwenden.

d.h. tabellen mit eher kleinen datenmengen, die baumstrukturen abbilden - wie man das i.d.R. tut über sowas wie eine referenz id_parent.

mein spezielles problem ist nun, mittels CTE eine query zu konstruieren, die als ergebnismenge 1. eine ebene des baumes (z.B. root) beinhaltet, welche 2. nur sätze enthalten für die irgendwo unterhalb dieser ebene ein suchbegriff/-kriterium erfüllt ist.

oder anders: ich moechte alle sätze die als id_parent = X haben (ebene) und die wiederum direkte oder indirekte kinder existieren (belibige tiefe darunter) für die ein anderes kriterium (z.B. suchbegriff) zutrifft.

also das prinzip CTE habe ich verstanden - nur irgendwie ist mein hirn gerade ziemlich blockiert :smiley: . wie bilde ich sowas ab :confused: ?

my blog: waiting for 8.4


Andreas

Cool … das war der richtige Anstoß … ich war der Sackgasse verfallen, das Problem als “Kinder” zu betrachten … ick such ja “Parents” … nu wirds mir klar.

Also Danke …

Jetzt muss ich mir nur noch ueberlegen wie ich CTE in mein Query-Abstraction Layer einbaue :slight_smile:

ich hoffe das ist ausreichend flott um so untermengen zu erzeugen …

was mir auffaellt - man kann immer nur eine CT erzeugen?

also ein konstrukt wie

with ct1 as ()
with ct2 as ()
select … from ct1, ct2 …

is nich moeglich?

nie probiert, ist auch für mich Neuland.

Andreas



test=# with recursive foo as (select 0 as a, 1 as b union all select a+1, b+1 from foo where a < 4),  bla as (select 0 as c, 1 as d union all select c+1, d+1 from bla where c < 3) select foo.*, bla.* from foo, bla;
 a | b | c | d
---+---+---+---
 0 | 1 | 0 | 1
 0 | 1 | 1 | 2
 0 | 1 | 2 | 3
 0 | 1 | 3 | 4
 1 | 2 | 0 | 1
 1 | 2 | 1 | 2
 1 | 2 | 2 | 3
 1 | 2 | 3 | 4
 2 | 3 | 0 | 1
 2 | 3 | 1 | 2
 2 | 3 | 2 | 3
 2 | 3 | 3 | 4
 3 | 4 | 0 | 1
 3 | 4 | 1 | 2
 3 | 4 | 2 | 3
 3 | 4 | 3 | 4
 4 | 5 | 0 | 1
 4 | 5 | 1 | 2
 4 | 5 | 2 | 3
 4 | 5 | 3 | 4
(20 rows)

geht also.

Andreas

Ja.

Andreas

manchmal möcht ich dich verprügeln :slight_smile:

übrigends - flott zu funktionieren scheint es tatsaechlich - habs mal auf eine “reichhaltigere” tabellenstruktur angewendet - ich bin mit der performance sehr zufrieden.

bleibt die frage wann 8.4 released wird :slight_smile:

schade … :frowning: