Rekursiver Auflösung einer Tabelle mittels mySQL

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
news [ Mi, 25 April 2007 16:25 ] [ ID #1697071 ]

Re: Rekursiver Auflösungeiner Tabelle mittels mySQL

news [at] 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.
sylvio runge [ Mi, 25 April 2007 16:52 ] [ ID #1697072 ]

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

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
Michael Ziegler [ Mi, 25 April 2007 17:10 ] [ ID #1697074 ]

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

On 25 Apr., 17:10, Michael Ziegler <haettsteg... [at] hoster.invalid>
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
news [ Do, 26 April 2007 09:04 ] [ ID #1698087 ]

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

news [at] 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
Michael Ziegler [ Do, 26 April 2007 11:28 ] [ ID #1698088 ]

Re: Rekursiver Auflösung einer Tabelle mittels mySQL

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 <haettsteg... [at] hoster.invalid>
wrote:
> n... [at] 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
news [ Fr, 27 April 2007 20:28 ] [ ID #1699120 ]
Datenbanken » de.comp.datenbanken.mysql » Rekursiver Auflösung einer Tabelle mittels mySQL

Vorheriges Thema: Auftragsboard
Nächstes Thema: Nach Upgrade 4.1 > 5.0: Problem mit Subqueries