![]() |
Datenbank: Oracle • Version: 9 • Zugriff über: egal
wie setze ich "connect by" richtig ein
Hallo zusammen,
ich habe zwei Tabellen, Personen und Vererbung Vererbung hat drei Felder: Erblasser,Anteil,Erbe Es können "Vererbungsketten" gebildet werden z.B. P1 - Erbe1 - Erbe2 - Erbe3 in diesen Fällen benötige ich Erbe3 und seinenErbanteil an P1 (Anteil1*Anteil2*Anteil3) dafür sollte sich eigentlich connect by anbieten, aber das bekomme ich nicht ans Laufen. Könntet Ihr mir da auf die Sprünge helfen? Gruß K-H |
AW: wie setze ich "connect by" richtig ein
Zitat:
|
AW: wie setze ich "connect by" richtig ein
Ich glaube da war mir etwas zu selbsverständlich:
Personen PersKey,Name,... Vererbung Erblasser,Anteil,Erbe wobei die Abfrage nach dem ersten Erbe so laüft:
Code:
Nach dem zweiten Erben (und seinem Vorgänger)
select Erbe1.Name
from Personen,Vererbung,Peronen Erbe1 where Personen.Perskey=Vererbung.Erblasser and Erbe.Perskey=Vererbung.Erbe1
Code:
Ich hoffe das ist etwas ausfürlicher
select Erbe1.Name,Erbe2.Name
from Personen,Vererbung,Peronen Erbe1,Vererbung Vererbung2 where Personen.Perskey=Vererbung.Erblasser and Erbe1.Perskey=Vererbung.Erbe and Erbe1.Perskey=Vererbung2.Erblasser and Erbe2.Perskey=Vererbung2.Erbe Gruß K-H |
AW: wie setze ich "connect by" richtig ein
Zitat:
Es fehlen Beispieldaten. Die Abfragen funktionieren nicht (Schreibfehler; Erbe1, Erbe2 existiert nicht!) Und es fehlt eine konkrete Vorgabe, bei welchen Eingabedaten was rauskommen soll. Sorry, Gedankenlesen ist erst nach meinem Zauberlehrgang dran. Edit: So, nachdem ich da nochmal etwas drüber nachgedacht habe, denke ich, dass "connect by" hier leider nicht angewendet werden kann, weil dieses Konstrukt eine hierarische Struktur (id, parent_id) innerhalb einer Tabelle vorraussetzt. Diese Vorrussetzungen sind hier nicht gegeben. |
AW: wie setze ich "connect by" richtig ein
Ohne Deine Tabelle jetzt genau zu kennen, gehte es bei Oracle so
Code:
Mit Start With bestimmst Du den Einsprung im Baum. Kannst auch danach Suchen im Web. SELECT * FROM MYTABLE START WITH VATER_ID = -1 CONNECT BY PRIOR SOHN_ID = VATER_ID; Gibt es genügend Beispiele. Gruß Borwin |
AW: wie setze ich "connect by" richtig ein
ich habs mir ausgwürfelt:
(die Tabelle Name enthält Namen, NameIndividual Vornamen,Geschlecht... , NameSuccessor die Beziehung zwischen Erblasser [NameKey] und Erbe [SuccessorKey], sowie den Erbanteil [Rate] )
Code:
Mit Dieser Abfrage bekomme ich alle Erbschaftsverhältnisse angezeigt, und es ist Nachvollziebar wer von wem, wieviel (NameSuccessor.Rate)geerbt hat.
select Erbl.Name "Erblasser",ErblI.Firstname "ErblasserVorn"
,Erbe.Name "Erbe" ,ErbeI.Firstname "ErbeVorn" ,Namesuccessor.*,level from NameSuccessor ,Name Erbl,Nameindividual ErblI ,Name Erbe,Nameindividual ErbeI where Erbl.Namekey=Namesuccessor.Namekey and Erbe.Namekey=NameSuccessor.SuccessorNameKey and ErbeI.NameKey=Erbe.NameKey and ErblI.NameKey=Erbl.NameKey -- start with NameSuccessor.Namekey=123456 connect by Namesuccessor.Namekey=prior Namesuccessor.Successornamekey Soll die Ausgabe sich nur auf einen Erblasser beziehen so wird
Code:
eingeschoben.
start with NameSuccessor.Namekey=123456
Wird eine Liste oder ein EndErbe benötigt,erhält man die Daten hierüber:
Code:
Wobei Erbl hier eigentlich überflüssig ist. Über not exists() werden alle Datensätze aus der Ausgabe verbannt, in denen Erben auch Erblasser sind. Es bleiben also nur Erben übrig.
select distinct Erbe.Name "Erbe",ErbeI.Firstname "ErbeVorn"
from NameSuccessor ,Name Erbl,Nameindividual Erbli ,Name Erbe,Nameindividual Erbei where Erbl.Namekey=Namesuccessor.Namekey and Erbe.Namekey=Namesuccessor.SuccessorNameKey and ErbeI.NameKey=Erbe.NameKey and ErblI.NameKey=Erbl.NameKey and not exists(select * from namesuccessor a where a.NameKey=Namesuccessor.Successornamekey) -- start with NameSuccessor.Namekey=123456 connect by Namesuccessor.namekey=prior Namesuccessor.Successornamekey Wird nur der oder die Enderben zu einem Erblasser gesucht kann auf das distinct verzichtet werden, da eine eindeutige Beziehung vorliegt. Erst wenn ein Erbe der Endpunkt einer "Erbenkette" ist, wird die Unterdrückung von Mehrfachnennungen durch distinct notwendig. Vielleicht hilft's dem einen oder anderen. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz