Einzelnen Beitrag anzeigen

Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: wie setze ich "connect by" richtig ein

  Alt 7. Jun 2011, 12:54
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat