Einzelnen Beitrag anzeigen
Alt 13.03.2008, 14:11   #1
Nestrus
Elite
 
Registriert seit: 01.07.2000
Alter: 40
Beiträge: 1.400


Nestrus eine Nachricht über ICQ schicken
Standard Oracle: Wie mache ich mehrfachen self-join möglichst perfomant?

Hallo,

ich hab auf einem Oracle 9i Server eine Tabelle mit Teilstrecken die ca. so aussieht (ich stell hier alles vereinfacht dar):

PK, FK, Hinweg (1= Hin, 2= Rück), lfdNr, von, nach

Jetzt sollte ich einen Teil der Daten so aufbereiten, das der gesamte Weg in einer Zeile steht, also alle Teilstrecken nacheinander. (Wenns 2 Hin- und 2 Rückwege gibt: PK, h1von, h1nach, h2von, h2nach, r1von, r1nach, r2von, r2nach) Das macht in einer Datenbank sehr wenig Sinn, aber ich muss es so auswerten, dass alle Infos eines Weges in einer Zeile stehen.

Zuerst habe ich probiert eine neue Tabelle zu machen:
create temp_wege as
select * from teilstrecken where hinweg = 1 and lfdnr = 1;
Dazu habe ich die Spalten für die weitern Wege getan und diese befüllt
update temp_wege set
h1von = (select von from teilstrecken where teilstrecken.fk = temp_wege.pk and hinweg = 1 and lfdnr = 1),
h1nach = (select nach from teilstrecken where teilstrecken.fk = temp_wege.pk and hinweg = 1 and lfdnr = 2); usw.
Das war allerdings sehr langsam.

Als nächstes probierte ich ganz viele joins zu schachteln:
select a.*, b.von as h2von, b.nach as h2nach from (
select a.*, b.von as h1von, b.nach as h1nach from (
select pk, weiter felder
from teilstrecken) a left join teilstrecken b on a.pk = b.pk
where b.Hinweg = 1 and b.lfdnr = 1) a left join teilstrecken b on a.pk = b.pk)
where b.Hinweg = 1 and b.lfdnr = 2;

Das war aber noch schlimmer, hier hab ich nach mehreren Stunden ohne Ergebnis abgebrochen.

Weiß jemand, wie ich das lösen könnte?

Vielen Dank im Voraus für die Hilfe. Ich hoffe, ich habe alles halbwegs verständlich geschildert!


Schöne Grüße
Nestrus
____________________________________
"reden 2 unsinn im wcm forum, meint der dritte is eh offtopic"
(Gifty am 14. Apr 2002 um 22:47 in " WCM Rat & Tat Forum > Meinung > Guru, e-Zitate & Off Topic > Kommt ein Mann zum Arzt...")
Nestrus ist offline   Mit Zitat antworten