![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Elite
![]() |
![]() 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...") |
![]() |
![]() |
![]() |
#2 |
Master
![]() Registriert seit: 20.11.2005
Beiträge: 748
|
![]() Mir fällt da jetzt auch keine Lösung ein, aber hoffentlich den Profis dort: Oracle Forum
|
![]() |
![]() |
![]() |
#3 |
Aussteiger
![]() |
![]() ich würde das nicht über ein statement lösen, sondern prozedural mittels PL/SQL (oder java
![]() 1.) alle "erststrecken" ermitteln (... where FK is null) und durchloopen 2.) zur jeweiligen erststrecke die zusatzstrecken suchen und die gewünschte verarbeitung durchführen soferne die zusatzstrecken wiederum weitere zusatzstrecken haben, könnte man punkt 2 auch noch rekursiv aufrufen solange ... vorteile: die pro schritt zu verarbeitenden datenmengen sind gering, da a.) die erststrecken über den index der foreign-key-column ermittelt werden b.) die teilstrecken über den index der primary-key-column sehr performant selektiert werden
____________________________________
Praktizierender Eristiker No hace falta ser un genio para saber quién dijo eso. Der wirklich faule Mensch ist oft extrem fleißig, denn er will möglichst schnell wieder faul sein. |
![]() |
![]() |
![]() |
#4 |
Elite
![]() |
![]() Es wäre schon gut, wenn ich alle Felder einer Teilstrecke auf ein Mal updaten könnte, das ich für jede Teilstrecke fünf Fehler einfügen muss...
@SerenDwyn: Danke für den Link, sollte ich nicht bald eine Lösung finden, werde ich mal dort fragen. @pc.net: Ich verstehe leider nicht wirklich wie du das meinst, kannst du einen Beispielcodeschnipsel posten? Die Erststrecke ist meist (ein paar haben nur einen Rückweg, aber die kann ich dann extra behandeln) die mit Hinweg=1 und lfdNr=1, die nächste wäre dann eben die mit dem gleichen fk und Hinweg=1 und lfdNr=2.
____________________________________
"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...") |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|