Die folgenden Beispiele zeigen, welche Auswirkungen das Kennzeichen left outer: Filterwert in on-Bedingung aufnehmen auf die Queryergebnisse hat.
Ein stammdatentragendes Merkmal ZPRODUCT (T00001) enthält zwei Datensätze.
#Feld (ZPRODUCT) |
A |
B |
Ein DataStore-Objekt ZSD_01 (T00002) enthält drei Datensätze:
#Feld (ZPRODUCT) |
#Datum (0DATE) |
ABC-Kennzeichen (ABCKEY) |
A |
27.09.2003 |
X |
A |
01.04.2003 |
X |
C |
17.05.2003 |
X |
Im InfoSet werden beide InfoProvider verknüpft über: ZPRODUCT- ZPRODUCT mit ZSD_01- ZPRODUCT
Es sollten nun folgende Fälle betrachtet werden:
Die Objekte werden über einen Inner Join verknüpft, alle Felder werden in der Query ausgegeben und es wird eine Einschränkung auf das Datum vorgenommen - nämlich auf den 01.04.2003. Wenn alle Objekte des InfoSets über einen Inner Join verknüpft sind, hat das Kennzeichen keinen Einfluss auf das erzeugte SQL-Statement bzw. auf das Endergebnis. Die Reihenfolge, ob die Bedingung vor Auswertung des Joins oder nach Ausführung des Joins ausgeführt wird, ist nicht relevant. Das Ergebnis ist identisch - unabhängig davon, ob die Einschränkungen in der on- oder in der where-Bedingung stehen.
In beiden Fällen erhält man als Ergebnis:
#Feld (ZPRODUCT) |
#Feld (ZPRODUCT) |
#Datum (0DATE) |
ABC-Kennzeichen (ABCKEY) |
A |
A |
01.04.2003 |
X |
Die Objekte werden über einen Left Outer Join (die outer-Bedingung wird an dem DataStore-Objekt gesetzt) verknüpft, alle Felder werden in der Query ausgegeben und es wird eine Einschränkung auf das Datum vorgenommen - nämlich auf den 01.04.2003.
In diesem Fall wird angenommen, dass das Kennzeichen initial ist. Somit wird die Einschränkung in die where-Bedingung aufgenommen und sie wird nach dem Join ausgewertet.
Für obiges Beispiel bedeutet dies folgendes:
Zunächst wird der Join gebildet. Daraus ergibt sich:
#Feld (ZPRODUCT) |
#Feld (ZPRODUCT) |
#Datum (0DATE) |
ABC-Kennzeichen (ABCKEY) |
A |
A |
27.09.2003 |
X |
A |
A |
01.04.2003 |
X |
B |
|
|
|
Nun wird auf diesem Ergebnis die Einschränkung angewendet (Datum = 01.04.2003).
Somit sieht das Ergebnis aus wie folgt:
#Feld (ZPRODUCT) |
#Feld (ZPRODUCT) |
#Datum (0DATE) |
ABC-Kennzeichen (ABCKEY) |
A |
A |
01.04.2003 |
X |
Die Objekte werden über einen Left Outer Join (die outer-Bedingung wird an dem DataStore-Objekt gesetzt) verknüpft, alle Felder werden in der Query ausgegeben und es wird eine Einschränkung auf das Datum vorgenommen - nämlich auf den 01.04.2003.
In diesem Fall wird angenommen, dass das Kennzeichen nicht initial ist. Somit wird die Einschränkung in die on-Bedingung aufgenommen und sie wird vor dem Join ausgewertet.
Für obiges Beispiel bedeutet dies folgendes:
Zunächst wird die Einschränkung ausgewertet. Für das DataStore-Objekt existiert dann folgender Satz:
#Feld (ZPRODUCT) |
#Datum (0DATE) |
ABC-Kennzeichen (ABCKEY) |
A |
01.04.2003 |
X |
Im zweiten Schritt erfolgt der Join. Somit sieht das Ergebnis aus wie folgt:
#Feld (ZPRODUCT) |
#Feld (ZPRODUCT) |
#Datum (0DATE) |
ABC-Kennzeichen (ABCKEY) |
A |
A |
01.04.2003 |
X |
B |
|
|
|
Dadurch, dass die Einschränkung auf den 01.04.2003 in die on-Bedingung kommt, erhält man nun als Ergebnis:
#Feld (ZPRODUCT) |
#Feld (ZPRODUCT) |
#Datum (0DATE) |
ABC-Kennzeichen (ABCKEY) |
A |
A |
01.04.2003 |
X |
B |
|
|
|