SQL JOIN über 3 Tabellen

20/02/2008 - 15:39 von paul.aeschlimann | Report spam
Hallo

Ich habe möchte einen SQL-String auf meinen Wunsch anpassen. Die
Tabellen dazu:

tRechnung
rn_ID (PK)
rn_Rechnungsnummer
etc.

tObjektdaten
od_ID (PK)
od_Sparte
etc.

tKundendaten
kd_ID (PK)
kd_Kundentyp
etc.

Die Rechnungen sind über die Tabelle "tObjektdatenRechnung" mit dem
Objekt und mit der Tabelle "tKundendatenRechnung" mit einer Person
verbunden. Soweit alles i.O.

Nun folgendes:
In einem Formular zeige ich Rechnungen an. Der RecordSource dieses
Formulars sieht folgendermassen aus:

SELECT tRechnung.*, tKundentyp.Kundentyp, tKundendaten.*,
tObjektart.oa_Objektart, tObjektdaten.*
FROM (tObjektart INNER JOIN tObjektdaten ON tObjektart.oa_ID tObjektdaten.od_Objektart) INNER JOIN (tKundentyp INNER JOIN
((tRechnung INNER JOIN tObjektdatenRechnung ON tRechnung.rn_ID tObjektdatenRechnung.or_rn_ID) INNER JOIN (tKundendaten INNER JOIN
tKundendatenRechnung ON tKundendaten.kd_ID tKundendatenRechnung.kr_kd_ID) ON tRechnung.rn_ID tKundendatenRechnung.kr_rn_ID) ON tKundentyp.ID tKundendaten.kd_Kundentyp) ON tObjektdaten.od_ID tObjektdatenRechnung.or_od_ID;

Funktionieren tut dies auch, nur zeigt es mir jetzt nur die Rechnungen
an, zu denen ein Objekt und eine Person gehört. Ich denke mal, dass
ist wegen dem INNER JOIN. Jetzt möchte ich aber ein "OUTER JOIN"
machen, so dass es mir auch die Rechnungen anzeigt, die über kein
Objekt oder keine Person verfügen. Das habe ich einfach ausprobiert,
in dem ich die INNER JOIN's mit einem LEFT JOIN bzw. RIGHT JOIN
ersetzt habe. Dann gibt es allerdings einen Syntax-Fehler, dass dieses
JOIN nicht unterstützt werde. Könnt ihr mir hierzu helfen?

http://www.office-loesung.de/ftopic..._0_asc.php
Ist das das gleiche, was ich machen möchte?

Gruss Paul
 

Lesen sie die antworten

#1 Mark Doerbandt
20/02/2008 - 15:45 | Warnen spam
Hallo,

:

http://www.office-loesung.de/ftopic..._0_asc.php
Ist das das gleiche, was ich machen möchte?



ja, ich denke schon. Hast Du denn mal ausprobiert, was dort empfohlen
wurde? Zu viele LEFT JOINs in einer Abfrage koennen Jet schon mal
ueberfordern. Da gilt dann ggf. "divide et impera" - sprich: die
Abfrage aufteilen, abspeichern und die gespeicherte Abfrage in der
naechsten benutzen. Du musst aber doch wahrscheinlich nicht alle INNER
durch LEF JOINs ersetzen?

Gruss - Mark

2. SEK (SQL Server-Entwickler-Konferenz) in Nürnberg:
12./13.4 und 19./20.4.2008 http://www.donkarl.com/SEK

Bitte keine eMails auf Newsgroup-Beitràge senden.

Ähnliche fragen