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:
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
Mit Dieser Abfrage bekomme ich alle Erbschaftsverhältnisse angezeigt, und es ist Nachvollziebar wer von wem, wieviel (NameSuccessor.Rate)geerbt hat.
Soll die Ausgabe sich nur auf einen Erblasser beziehen so wird
Code:
start with NameSuccessor.Namekey=123456
eingeschoben.
Wird eine Liste oder ein EndErbe benötigt,erhält man die Daten hierüber:
Code:
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
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.
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