Re: Strukturproblem mit Hierarchie

From: Peter Wullinger <some-mail-drop(at)gmx(dot)net>
To: Martin Fleck <help(at)action-script(dot)com>
Cc: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Re: Strukturproblem mit Hierarchie
Date: 2004-09-27 13:13:53
Message-ID: 20040927131353.GA6589@peter.home.wul
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

In epistula a Martin Fleck, die horaque Sun, Sep 26, 2004 at 09:10:09PM +0200:
>
> hallo,
>
> ich habe hier ein Strukturproblem.
>
>
> Die folgende Hierarchie soll in der Datenbank abgebildet werden:
>
> - Projekte
> - Kunde A
> - Projekt B
> - Project C
>
>
> Dazu habe ich mir die folgende Tabelle angelegt:
>
> id parent_id title
> 1 null Projekte
> 2 1 Kunde A
> 3 2 Projekt B
> 4 2 Projekt C
>
>
> Die Ausgabe der Daten soll später wie folgt erscheinen:
>
> Projekte / Kunde A / Projekt B
>
>
> Ich würde das jetzt über eine Stored Procedure lösen (n-Queries abfragen).
> Ihr auch?

Ich nenn die Tabelle jetzt mal "operation", weil mir nichts
besseres einfällt und ich keine Ahnung habe, worum es genau geht.

Wenn du weißt, daß sich deine nicht über drei Ebenen erstreckt kannst
du das alles in eine Abfrage packen, wobei du die Tabelle jeweils mit
sich selbst joinst:

psql: ~# CREATE TABLE operation (
id BIGSERIAL PRIMARY KEY,
parent BIGINT REFERENCES operation (id) DEFAULT NULL,
title VARCHAR NOT NULL
);

psql: ~# INSERT INTO operation (parent, title) VALUES (NULL, 'Projekte');
psql: ~# INSERT INTO operation (parent, title) VALUES (1, 'Kunde A');
psql: ~# INSERT INTO operation (parent, title) VALUES (2, 'Projekt B');
psql: ~# INSERT INTO operation (parent, title) VALUES (2, 'Projekt C');
psql: ~# INSERT INTO operation (parent, title) VALUES (1, 'Kunde B');

id | parent | title
----+--------+-----------
1 | | Projekte
2 | 1 | Kunde A
3 | 2 | Projekt B
4 | 2 | Projekt C
5 | 1 | Kunde A
(4 rows)

psql: ~# SELECT op1.title AS title1, op2.title AS title2, op3.title AS title3
FROM (operation op1 LEFT JOIN operation op2
ON op2.parent = op1.id)
LEFT JOIN operation op3
ON op3.parent = op2.id
WHERE op1.parent IS NULL;

title1 | title2 | title3
----------+---------+-----------
Projekte | Kunde A | Projekt B
Projekte | Kunde A | Projekt C
Projekte | Kunde B |
(3 rows)

>
> Kann ein SQL-Query rekursiv über Datensätze gehen? Eher nicht, oder?
>

Salopp formuliert kann man in einem einzigen SELECT-Query keine
Abfragen machen, bei der die Spalten des Abfrageergebnisses von
den Datensätzen abhängen. Wenn ich also oben eine vierte Spalte
haben will, muß ich das vorher wissen oder anders implementieren.

Wenn ich acht Spalten haben will, hat wenigstens der GeQO was zu tun ;-).

Gruß,
Peter

--
Live is what happens, while we are busy making other plans
-- John Lennon

In response to

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Peter 1 Schrammel 2004-09-28 07:45:48 Re: Strukturproblem mit Hierarchie
Previous Message Martin Fleck 2004-09-26 19:10:09 Strukturproblem mit Hierarchie