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 - UNION
Kurzreferenz
Syntax
... UNION [ALL|DISTINCT]
[(] SELECT { select_clause
FROM source }
|{ FROM source
FIELDS select_clause }
[WHERE sql_cond]
[GROUP BY
group] [HAVING group_cond]
[UNION [ALL|DISTINCT] select] [)] ...
Wirkung
Der Zusatz UNION vereinigt die Ergebnismengen zweier SELECT-Anweisungen.
Die Zeilen der Ergebnismenge der SELECT-Anweisung rechts von UNION
werden in die Ergebnismenge der SELECT-Anweisung links von UNION
eingefügt. Die Spalten der Ergebnismenge behalten die in der SELECT-Anweisung links von UNION definierten Namen.
Die SELECT-Anweisungen links und rechts von UNION
haben ihre eigenen SELECT-, FROM-,
WHERE-,
GROUP BY- und HAVING-Klauseln.
Die SELECT-Anweisung auf der rechten Seite von UNION kann selbst einen UNION-Zusatz enthalten und mit runden Klammern (
) eingeklammert werden. Die ORDER
BY- und die INTO-Klausel
wirken auf die vereinigte Ergebnismenge und sind hinter der Position der letzten schließenden Klammer aufzuführen.
Die Zusätze ALL und DISTINCT regeln, wie
mit mehrfach vorkommenden Zeilen verfahren wird, wobei DISTINCT die Standardeinstellung ist:
-
Wenn der Zusatz ALL angegeben ist, werden alle Zeilen der Ergebnismenge der rechten SELECT-Anweisung in die bereits vorhandenen Ergebnismenge eingefügt.
-
Wenn der Zusatz DISTINCT oder keiner der beiden Zusätze angegeben
ist, werden die Zeilen der Ergebnismenge der rechten SELECT-Anweisung in
die bereits vorhandene Ergebnismenge eingefügt und dann alle mehrfach vorkommenden Zeilen bis auf eine gelöscht, wofür alle Spalten der Ergebnismenge betrachtet werden.
Die Auswertung von mit UNION verknüpften SELECT-Anweisungen
erfolgt von links nach rechts, wobei über Klammerungen eine Priorisierung bewirkt werden kann.
Die Ergebnismenge von mit UNION verknüpften SELECT-Anweisungen
wird immer als mehrzeilig betrachtet und der Zusatz
SINGLE ist deshalb nicht erlaubt. Bei der Zuweisung an einen nicht-tabellenartigen Zielbereich,
d.h. bei einer SELECT-Anweisung ohne den Zusatz INTO|APPENDING ... TABLE wird immer eine mit ENDSELECT abzuschließende Schleife geöffnet.
Für die Klauseln und Zusätze der mit UNION vereinigten
SELECT-Anweisungen gilt das Gleiche wie für eine einzelne SELECT-Anweisung mit folgenden Besonderheiten:
-
Die SELECT-Liste muss aus
einer Liste von Spaltenangaben col_spec
bestehen, die Spalten der Datenquellen und SQL-Ausdrücke inklusive Hostvariablen und Hostausdrücke
umfassen kann. Die Angaben von * oder data_source~* sind nicht möglich.
-
Alle SELECT-Listen von über
UNION verknüpften SELECT-Anweisungen müssen gleich viele Elemente haben.
-
Die einander zugeordneten Spalten müssen die gleichen Typeigenschaften bezüglich
eingebautem Datentyp Länge und Anzahl der Nachkommastellen haben, mit folgenden Ausnahmen:
- Numerische Typen INT1,
INT2 ,
INT4 und
INT8 können eine Spalte bilden. Die resultierende Spalte hat den Datentyp mit dem größten vorkommenden Wertebereich.
- Numerische Typen DEC dürfen unterschiedliche
Längen, müssen aber die gleiche Anzahl von Nachkommastellen haben. Die resultierende Spalte hat den Datentyp mit der größten vorkommenden Länge. Die entsprechenden speziellen Typen
CURR und
QUAN werden dabei wie DEC behandelt.
- Die numerischen Typen DF16_DEC
DF34_DEC werden wie die Zahlen vom Typ
DEC behandelt, als die sie abgelegt sind, und es gilt obige Regel bezüglich Längen und Nachkommastellen.
- Zeichenartige Typen CHAR dürfen unterschiedliche
Längen haben. Die resultierende Spalte hat den Datentyp mit der größten vorkommenden Länge. Die entsprechenden speziellen Typen
CLNT,
LANG,
CUKY und
UNIT werden dabei wie CHAR behandelt.
-
Alle anderen Typen müssen vollständig gleich sein. Dies gilt insbesondere für
NUMC und
RAW, bei denen die Längen übereinstimmen müssen. Auch können die verschiedenen Arten von
Strings nicht kombiniert werden.
-
Wenn in der INTO-Klausel der
Zusatz CORRESPONDING oder eine Inline-Deklaration @DATA(...) verwendet wird, müssen die Spaltennamen aller Ergebnismengen von links nach rechts gleich sein.
-
Spalten der Ergebnismenge, die hinter ORDER
BY aufgeführt werden, müssen ebenfalls in allen beteiligten SELECT-Anweisungen
den gleichen Namen haben. Der Zusatz ORDER BY PRIMARY KEY ist nicht erlaubt.
-
In den WHERE-Bedingungen der beteiligten
SELECT-Anweisungen ist der Zusatz FOR ALL ENTRIES nicht erlaubt.
-
Der Zusatz UP TO n ROWS ist nicht erlaubt.
Die Anzahl der über UNION verknüpfbaren SELECT-Anweisungen ist nicht durch einen festen Wert begrenzt.
Hinweise
-
Jede der verknüpften SELECT-Anweisungen hat ihre eigene
Mandantenbehandlung.
Ein Zusatz USING CLIENT
oder CLIENT SPECIFIED wirkt nur auf die SELECT-Anweisung, für die er angegeben ist.
-
Wenn erforderlich, können die Spaltennamen der einzelnen Ergebnismengen über alternative Spaltennamen hinter AS angepasst werden.
-
Die numerischen Typen DF16_DEC und
DF34_DEC können nur bei übereinstimmenden Nachkommastellen gemeinsam in einer Spalte verwendet werden.
-
Um die Spalten der Ergebnismenge der beteiligten SELECT-Anweisungen aufeinander abzustimmen, können SQL-Ausdrücke, Hostausdrücke und Hostvariablen verwendet werden.
-
Eine Priorisierung mit Klammerungen wirkt sich insbesondere auf die Behandlung mehrfach vorkommender Zeilen mit DISTINCT aus.
-
Beim Standardverhalten bzw. beim Zusatz DISTINCT ist zu beachten, dass dieser
immer auf die gesamte bereits vorhandene Ergebnismenge der linken Seite wirkt. Ein Zusatz DISTINCT
entfernt auch doppelt vorkommende Zeilen, die durch den Zusatz ALL vorangehender UNION-Zusätze entstanden sind.
-
Bei Verwendung von UNION umgeht die SELECT-Anweisung die SAP-Pufferung.
-
Der Zusatz UNION kann auch in der Anweisung OPEN CURSOR oder in einer
Subquery in der
WHERE-Bedingung oder hinter INSERT verwendet werden.
-
Bei der Verwendung von UNION wird die Syntaxprüfung in einem
strikten Modus ausgeführt, welche
die Anweisung strenger behandelt als die normale Syntaxprüfung. Insbesondere müssen die
INTO-Klausel und die Zusätze
additional_options am Ende der gesamten SELECT-Anweisung aufgeführt werden.
Beispiele
Siehe