SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Referenz → Externe Daten verarbeiten → ABAP-Datenbankzugriffe → Open SQL → Open SQL - Lesende Zugriffe → SELECT → SELECT - FROM →
SELECT - JOIN
Syntax
... [(] {
data_source [AS tabalias]}|join
{[INNER] JOIN}|{LEFT|RIGHT [OUTER] JOIN}
{
data_source [AS tabalias]}|join ON join_cond [)] ... .
Zusatz:
Wirkung
Kombination von Spalten zweier oder mehrerer Datenquellen in einer Ergebnismenge in einem Join-Ausdruck. Ein Join-Ausdruck verknüpft eine linke Seite mit einer rechten Seite entweder über [INNER] JOIN oder LEFT|RIGHT [OUTER] JOIN. Je nach Verknüpfung handelt es sich bei dem Join-Ausdruck um einen inneren (INNER) oder einen äußeren (LEFT OUTER oder RIGHT OUTER) Join. Jeder Join Ausdruck muss eine Join-Bedingung join_cond hinter ON enthalten (siehe unten). Für die möglichen Angaben auf der linken und rechten Seite gilt:
Die Priorität der Auswertung von geschachtelten Join-Ausdrücken richtet sich nach der Position der ON-Bedingungen. Von links nach rechts wird jede ON-Bedingung dem direkt vorangehenden JOIN zugeordnet und bildet einen Join-Ausdruck. Ein solcher Join-Ausdruck kann optional mit runden Klammern ( ) umgeben werden. Explizit angegebene runde Klammern müssen der implizit durch die ON-Bedingungen vorgegebenen Klammerung entsprechen.
Beispiel
Siehe Mehrfache Joins.
Ergebnismenge beim inneren Join
Der innere Join verknüpft die Spalten der in der Ergebnismenge der linken Seite vorhandenen Zeilen mit den Spalten der in der Ergebnismenge der rechten Seite vorhandenen Zeilen zu einer Ergebnismenge, die alle Kombinationen von Zeilen enthält, deren Spalten die Bedingung join_cond gemeinsam erfüllen. Wenn es in den Ergebnismengen der linken und rechten Seite keine Zeilen gibt, welche join_cond erfüllen, wird in der resultierenden Ergebnismenge keine Zeile erzeugt.
Beispiel
Siehe Innere und äußere Joins.
Ergebnismenge beim äußeren Join
Der äußere Join erstellt im Prinzip die gleiche Ergebnismenge wie der innere Join mit dem Unterschied, dass für jede selektierte Zeile der linken Seite beim LEFT OUTER JOIN bzw. der rechten Seite beim RIGHT OUTER JOIN mindestens eine Zeile in der Ergebnismenge erzeugt wird, auch wenn keine Zeile der anderen Seite die Bedingung join_cond erfüllt. Die Spalten der anderen Seite, welche die Bedingung join_cond nicht erfüllen, werden mit Null-Werten gefüllt.
Hinweise
Beispiel
Siehe Innere und äußere Joins.
... ON join_cond
Wirkung
Join-Bedingung. Die Syntax der Join-Bedingungen join_cond ist die gleiche wie die der Bedingungen sql_cond hinter dem Zusatz WHERE, jedoch mit folgenden Besonderheiten:
Hinweise
Beispiel
Verknüpfung der Spalten carrname, connid, fldate der Datenbanktabellen scarr, spfli und sflight über zwei innere Joins. Es wird eine Liste der Flüge von p_cityfr nach p_cityto erstellt. Für jede Tabelle werden Alternativnamen verwendet.
PARAMETERS: p_cityfr TYPE spfli-cityfrom,
p_cityto TYPE spfli-cityto.
TYPES: BEGIN OF wa,
fldate TYPE sflight-fldate,
carrname TYPE scarr-carrname,
connid TYPE spfli-connid,
END OF wa.
DATA itab TYPE SORTED TABLE OF wa
WITH UNIQUE KEY fldate carrname connid.
SELECT c~carrname, p~connid, f~fldate
FROM ( ( scarr AS c
INNER JOIN spfli AS p ON p~carrid = c~carrid
AND p~cityfrom = @p_cityfr
AND p~cityto = @p_cityto )
INNER JOIN sflight AS f ON f~carrid = p~carrid
AND f~connid = p~connid )
INTO CORRESPONDING FIELDS OF TABLE @itab.
cl_demo_output=>display( itab ).
Beispiel
Verknüpfung der Spalten carrid, carrname und connid der Datenbanktabellen scarr und spfli über einen linken äußeren Join. Bei allen Flügen, die nicht von p_cityfr ausgehen, wird die Spalte connid auf den Null-Wert gesetzt, der bei der Übergabe an das zugeordnete Datenobjekt in den typgerechten Initialwert verwandelt wird. Es werden alle Fluggesellschaften ausgegeben, die nicht von p_cityfr fliegen.
PARAMETERS p_cityfr TYPE spfli-cityfrom.
TYPES: BEGIN OF wa,
carrid TYPE scarr-carrid,
carrname TYPE scarr-carrname,
connid TYPE spfli-connid,
END OF wa.
DATA itab TYPE SORTED TABLE OF wa
WITH NON-UNIQUE KEY carrid.
SELECT s~carrid, s~carrname, p~connid
FROM scarr AS s
LEFT OUTER JOIN spfli AS p ON s~carrid = p~carrid
AND p~cityfrom = @p_cityfr
INTO CORRESPONDING FIELDS OF TABLE @itab.
DELETE itab WHERE connid <> '0000'.
cl_demo_output=>display( itab ).