ABAP - Schlüsselwortdokumentation →  ABAP - Referenz →  Externe Daten verarbeiten →  ABAP-Datenbankzugriffe →  Open SQL →  Open SQL - Lesende Zugriffe →  SELECT →  SELECT - FROM → 

SELECT - JOIN

Kurzreferenz

Syntax

... [(] { data_source [AS tabalias]}|join
          {[INNER] JOIN}|{LEFT|RIGHT [OUTER] JOIN}
             { data_source [AS tabalias]}|join ON join_cond [)] ...  .


Zusatz:

... ON join_cond

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.

Zusatz

... 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

wird die Syntaxprüfung im strikten Modus ab Release 7.50 ausgeführt, welche die Anweisung strenger behandelt als die normale Syntaxprüfung.

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 ).



Weiterlesen
Innere und äußere Joins
Mehrfache Joins