Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Left Outer Join  Dokument im Navigationsbaum lokalisieren

Verwendung

Üblicherweise werden bei der Definition von InfoSets die Objekte über Inner-Join-Operatoren verbunden. Es besteht jedoch auch die Möglichkeit, Left Outer Joins zu verwenden.

Hinweis

Für InfoCubes sind keine Left Outer Joins möglich. Dies würde die Performance zu sehr beeinträchtigen.

Inner Join und Left Outer Join unterscheiden sich nur in dem Fall, dass eine der beteiligten Tabellen keinen passenden Satz gemäß den Join-Bedingungen enthält.

Bei einem Inner Join (Tabelle1 Inner Join Tabelle2) wird in diesem Fall kein Satz in die Ergebnismenge aufgenommen. Das bedeutet aber auch, dass der entsprechende Satz aus Tabelle1 in der Ergebnismenge keine Berücksichtigung findet.                                       

Bei einem Left Outer Join (Tabelle1 Left Outer Join Tabelle2) wird in diesem Fall genau ein Satz in die Ergebnismenge aufgenommen. In diesem Satz erhalten die Felder aus Tabelle1 die Werte des Satzes aus Tabelle1 und die Felder aus Tabelle2 werden alle mit dem Initialwert gefüllt.  

Bei einem Left Outer Join spielt die Reihenfolge der Operanden eine wesentliche Rolle. Das heißt, die folgenden Joins beschreiben verschiedene Ergebnismengen:

Diese Grafik wird im zugehörigen Text erklärt 

Achtung

Bei der Definition eines Left Outer Joins muss die Reihenfolge beachtet werden. Bei einem Inner Join ist die Reihenfolge der Operanden beliebig.

Einen Left Outer Join sollten Sie immer dann verwenden, wenn

...

       1.      nicht sichergestellt werden kann, dass gemäß der Join-Bedingungen immer mindestens ein passender Satz in jeder beteiligten Tabelle gefunden wird, und

       2.      verhindert werden soll, dass Sätze nicht in der Ergebnismenge aufgenommen werden, weil eine der beteiligten Tabellen keinen Beitrag liefert.

Empfehlung

Aus den bisherigen Ausführungen könnte gefolgert werden, dass ein Left Outer Join häufig Vorteile bringt und deshalb bevorzugt verwendet werden sollte. Deshalb sei an dieser Stelle ausdrücklich darauf hingewiesen, dass ein Left Outer Join nur verwendet werden sollte, wenn es unbedingt notwendig ist. Ein Left Outer Join hat eine deutlich geringere Performance als ein entsprechender Inner Join und unterliegt außerdem einigen Einschränkungen (siehe Funktionsumfang).

Funktionsumfang

Wird ein Left Outer Join verwendet, so gilt für die rechte Tabelle (rechter Operand) die Einschränkung, dass  

·        Join-Bedingungen nur mit genau einer weiteren Tabelle definiert sein dürfen und                                                

·        diese Tabelle selbst nicht wiederum rechte Tabelle (rechter Operand) eines Left Outer Joins sein darf.                                        

Mit Left Outer Joins angeschlossene Tabellen bilden deshalb - bildlich gesprochen - immer das Ende einer Kette von Tabellen. Auf diese Art können in einem InfoSet beliebig viele Tabellen mit Left Outer Join an einen Kern von Tabellen, die über Inner Joins verbunden sind, angeschlossen werden.                                                  

Die vorhandenen Einschränkungen bei der Definition von Left Outer Joins sind auf technische Einschränkungen der Datenbanken zurückzuführen. Für Inner Joins gelten diese Einschränkungen nicht. 

Filterwert in Bedingung aufnehmen

In den Globalen Eigenschaften zum InfoSet können Sie über ein Kennzeichen bestimmen, wie eine Bedingung auf einem Feld einer Left-Outer-Tabelle im SQL-Statement umgesetzt wird.

Dies hat Auswirkungen auf die Queryergebnisse:

·        Wenn Sie das Kennzeichen left outer: Filterwert in on-Bedingung aufnehmen gesetzt haben, wird die Bedingung/Einschränkung in die on-Bedingung im SQL-Statement aufgenommen. Die Bedingung wird dann vor dem Join ausgewertet.

·        Wenn Sie das Kennzeichen nicht gesetzt haben, wird die Bedingung/Einschränkung in die where-Bedingung aufgenommen. Die Bedingung wird dann erst nach dem Join ausgewertet.

Per Voreinstellung ist das Kennzeichen nicht gesetzt. Welche Auswirkungen dieses Kennzeichen auf das Ergebnis hat, sehen Sie in den Beispielen für die Umsetzung von Bedingungen.

Beispiel

Ein typisches Beispiel wäre ein DataStore-Objekt, das im Datenteil neben Kennzahlen ein Merkmal wie zum Beispiel WERK enthält. In einem InfoSet wird ein Join zwischen diesem DataStore-Objekt und dem Merkmal WERK definiert, um bei Auswertungen auch auf die Attribute von WERK zugreifen zu können. Eine Query über diesem DataStore-Objekt soll die im DataStore-Objekt vorhandenen Kennzahlen auswerten.   

Wird nun ein Inner Join verwendet und enthält ein Satz des DataStore-Objektes eine Ausprägung für WERK, für die noch kein Eintrag in der entsprechenden Stammdatentabelle existiert, so würde dieser Satz nicht in die Ergebnismenge aufgenommen werden und dementsprechend würden die Kennzahlen dieses Satzes nicht berücksichtigt werden. Wird dagegen ein Left Outer Join (DataStore-Objekt Left Outer Join WERK) verwendet, so wird der betreffende Satz berücksichtigt, allerdings sind in diesem Fall alle Attribute des (nicht vorhandenen) Merkmals WERK initial. Es hängt von    der Art der gewünschten Auswertung ab, welches Verhalten das richtige ist. Beide Fälle können sinnvoll sein. 

Hinweis

Die Tabelle, über die selektiert wird (also die Haupttabelle) darf nie als Left Outer Join gekennzeichnet werden.

Siehe auch:

Join-Bedingung definieren

Ende des Inhaltsbereichs