Rekursiver Auflösung einer Tabelle mittels mySQL

Rekursiver Auflösung einer Tabelle mittels mySQL

am 25.04.2007 16:25:17 von news

Hallo,

hat jemand eine Idee wie man folgende verschachtelte Tabelle per SQL
Abfragen kann um dann die untersten elemente zu bekommen?
Tab1:
Feld1 | Feld2
AA | AAB1
AZ | AA
AF | AZ

Ich würde die Tabelle nun gerne so auflösen, dass das Ergebnis dann
wie folgt aussieht:
Feld1 | Feld2
AA | AAB1
AZ | AAB1
AF | AAB1

Es sollen dann praktisch alle Elemente das letzte Element in Kette
beinhalten.
Funktioniert das mit mySQL? Wenn ja wie?
Vielen Dank
Grüße
Michi

Re: Rekursiver Auflösungeiner Tabelle mittels mySQL

am 25.04.2007 16:52:00 von sylvio runge

news@cht3.com wrote:
Bitte konfiguirere mal Deinen Newsreader richtig; danke

>
> Hallo,
>
> hat jemand eine Idee wie man folgende verschachtelte Tabelle per SQL
> Abfragen kann um dann die untersten elemente zu bekommen?
> Tab1:
> Feld1 | Feld2
> AA | AAB1
> AZ | AA
> AF | AZ
>
> Ich würde die Tabelle nun gerne so auflösen, dass das Ergebnis dann
> wie folgt aussieht:
> Feld1 | Feld2
> AA | AAB1
> AZ | AAB1
> AF | AAB1
>
> Es sollen dann praktisch alle Elemente das letzte Element in Kette
> beinhalten.
> Funktioniert das mit mySQL? Wenn ja wie?
Ist recht konfus was Du hier sagst. Ich rate (wegen der 2. Tabelle)
mal; Du willst ein "update ... SET Feld2='AAB1' machen? Wo ist da
aber die verschachtelte Tabelle?


S.

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

am 25.04.2007 17:10:11 von Michael Ziegler

sylvio runge schrieb:
> Ist recht konfus was Du hier sagst. Ich rate (wegen der 2. Tabelle)
> mal; Du willst ein "update ... SET Feld2='AAB1' machen? Wo ist da
> aber die verschachtelte Tabelle?

Ich vermute eher er möchte per select sowas wie die transitive Hülle der
Tabelle haben, nur quasi ohne die "Zwischenstationen".


Man kann ja auflösen:

AA -> AAB1
AZ -> AA -> AAB1
AF -> AZ -> AA -> AAB1


Und als Ergebnis soll dann rauskommen:

AA -> AAB1
AZ -> AAB1
AF -> AAB1

Gruß,
Michael

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

am 26.04.2007 09:04:06 von news

On 25 Apr., 17:10, Michael Ziegler
wrote:
> sylvio runge schrieb:
>
> > Ist recht konfus was Du hier sagst. Ich rate (wegen der 2. Tabelle)
> > mal; Du willst ein "update ... SET Feld2=3D'AAB1' machen? Wo ist da
> > aber die verschachtelte Tabelle?
>
> Ich vermute eher er möchte per select sowas wie die transitive Hülle =
der
> Tabelle haben, nur quasi ohne die "Zwischenstationen".
>
> Man kann ja auflösen:
>
> AA -> AAB1
> AZ -> AA -> AAB1
> AF -> AZ -> AA -> AAB1
>
> Und als Ergebnis soll dann rauskommen:
>
> AA -> AAB1
> AZ -> AAB1
> AF -> AAB1
>
> Gruß,
> Michael

Hallo Michael,

dass ist genau dass was ich möchte. Habe mich glaube ich etwas komisch
ausgedrückt. Gibt es hier eine Möglichkeit das so auszugeben.

Grüße
Michi

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

am 26.04.2007 11:28:22 von Michael Ziegler

news@cht3.com schrieb:
> dass ist genau dass was ich möchte. Habe mich glaube ich etwas komisch
> ausgedrückt. Gibt es hier eine Möglichkeit das so auszugeben.

Ich hab grade mal nach fertigem SQL-Code für die transitive Hülle
gesucht, dummerweise nichts gefunden, und ich weiß nicht wie man das am
besten codet :/

Meine Grundidee lautet: Transitive Hülle erzeugen und nur die Einträge
selektieren, bei denen die rechte Seite nicht auf der linken Seite der
Original-Tabelle vorkommt. Will sagen:

Ausgangstabelle:
Feld1 | Feld2
AA | AAB1
AZ | AA
AF | AZ

Transitive Hülle davon:
Feld1 | Feld2
AA | AAB1
AZ | AA
AZ | AAB1
AF | AZ
AF | AA
AF | AAB1

Nun selektiere aus der transitiven Hülle alle Tupel, deren Feld2 nicht
in Feld1 der Ausgangstabelle vorkommt, also die Tupel:
Feld1 | Feld2
AA | AAB1
AZ | AAB1
AF | AAB1

Nun ist ein Coder gefragt der das umsetzen kann - oder eine bessere Idee
hat :P

Viele Grüße,
Michael

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

am 27.04.2007 20:28:44 von news

Genau so habe ich mir das auch gedacht. Nur leider weiß ich nicht wie
man das mit einem SQL Statement hinbekommt. Ich weiß einfach nicht wo
ich ansetzen soll. Auch in der mysql Dokumentation bin ich nicht
weitergekomen. Kann mir jemand mit dem Statement weiter helfen?

Danke
Michi


On 26 Apr., 11:28, Michael Ziegler
wrote:
> n...@cht3.com schrieb:
>
> > dass ist genau dass was ich möchte. Habe mich glaube ich etwas komisch
> > ausgedrückt. Gibt es hier eine Möglichkeit das so auszugeben.
>
> Ich hab grade mal nach fertigem SQL-Code für die transitive Hülle
> gesucht, dummerweise nichts gefunden, und ich weiß nicht wie man das am
> besten codet :/
>
> Meine Grundidee lautet: Transitive Hülle erzeugen und nur die Einträge
> selektieren, bei denen die rechte Seite nicht auf der linken Seite der
> Original-Tabelle vorkommt. Will sagen:
>
> Ausgangstabelle:
> Feld1 | Feld2
> AA | AAB1
> AZ | AA
> AF | AZ
>
> Transitive Hülle davon:
> Feld1 | Feld2
> AA | AAB1
> AZ | AA
> AZ | AAB1
> AF | AZ
> AF | AA
> AF | AAB1
>
> Nun selektiere aus der transitiven Hülle alle Tupel, deren Feld2 nicht
> in Feld1 der Ausgangstabelle vorkommt, also die Tupel:
> Feld1 | Feld2
> AA | AAB1
> AZ | AAB1
> AF | AAB1
>
> Nun ist ein Coder gefragt der das umsetzen kann - oder eine bessere Idee
> hat :P
>
> Viele Grüße,
> Michael