Auf Thema antworten

Och die Beschreibung ist schon ganz gut verständlich. Vermutlich ist das Design so vorgegeben und du entwickelst das nicht selber?


Jedenfalls ist klar das die Rechnungen (aus zwei Tabellen; n:1 zum Vertrag) in einem sinnvollen Zusammenhang mit dem Vertrag stehen aber eben nicht jede Ausgangsrechnungen exakt zu einer Eingangsrechnungen, vermutlich gibt es da gar keine Verbindung. Der Join macht aber genau das, er stellt jeder Ausgangsrechnung auch jede Eingangsrechnung gegenüber weil eine Einschränkung fehlt.


Ich würde die Summen gar nicht mit einem GROUP BY im Hauptselect bilden, wie gesagt es gibt viele brauchbare Wege das zu lösen. Nachvollziehbarer ist eventuell etwas wie das hier:

[CODE]

SELECT v.*,

( SELECT sum(e.betrag)

FROM eingangsrechnungen e

WHERE e.vID = v.ID ) AS summe_eingangsrechnungen,

( SELECT sum(a.betrag)

FROM ausgangsrechnungen a

WHERE a.vID = v.ID ) AS summe_ausgangsrechnungen

FROM verträge v[/CODE]

Das ist jetzt natürlich vereinfacht, du musst im Subselect innerhalb des SELECT-Teils noch joinen um deine Beträge zu ermitteln. Entscheidend ist, das du im Subselect auf ein Kriterium aus dem Hauptselect zugreifen kannst, in deinem Fall v.ID. Das Prinzip ist einfach und der Äußere Select ist völlig frei definierbar mit WHERE-Kriterien etc.


Negativ an dieser Version kann die Performance werden. Jede Zeile von verträge führt zu zwei Selects auf die Rechnungstabellen. Aber von der Grundlogik her erstmal simpel und auch nicht zwingend ein no go.


Zurück
Oben