SAP NetWeaver AS ABAP Release 752, ©Copyright 2017 SAP AG. Alle Rechte vorbehalten.
ABAP - Schlüsselwortdokumentation → ABAP - Referenz → Interne Daten verarbeiten → Interne Tabellen → Ausdrücke und Funktionen für interne Tabellen → FILTER - Filteroperator →FILTER - Filtertabelle
Syntax
... FILTER type( itab {[EXCEPT] IN ftab [USING KEY
keyname]}
| {[USING KEY
keyname] [EXCEPT] IN ftab}
WHERE c1 op f1 [AND c2 op f2 [...]] ) ...
Zusätze:
1. ... USING KEY keyname
2. ... WHERE c1 op v1 [AND c2 op v2 [...]]
Wirkung
Diese Variante des Filteroperators FILTER filtert itab über Werte aus einer internen Tabelle ftab. In der WHERE-Bedingung werden die Spalten von itab mit den Werten der Spalten des Tabellenschlüssels der Zeilen der Filtertabelle ftab verglichen. Es werden die Zeilen von itab verwendet, für welche es in ftab mindestens eine Zeile gibt, welche die WHERE-Bedingung erfüllen bzw. für welche es bei der Angabe von EXCEPT keine solche Zeile in ftab gibt. Bei ftab handelt es sich um eine funktionale Operandenposition.
Mit USING KEY kann je nach Position der Angabe entweder ein Schlüssel der Tabelle ftab oder der Tabelle itab angegeben werden, der dann für den Zugriff auf diese verwendet wird. Wenn USING KEY nicht verwendet wird, muss die Filtertabelle ftab einen sortierten Schlüssel oder einen Hash-Schlüssel als primären Tabellenschlüssel haben, der dann für den Zugriff auf die Filtertabelle verwendet wird.
Hinweis
Die Zeilentypen von itab und ftab müssen nicht gleich sein.
Beispiel
Filterung dreier Zeilen aus der internen Tabelle carriers. Die Filtertabelle hat einen sortierten Primärschlüssel. Dieser wird implizit verwendet und der Zusatz USING KEY muss nicht angegeben werden.
SELECT *
FROM scarr
INTO TABLE @DATA(carriers).
DATA filter TYPE SORTED TABLE OF scarr-carrid
WITH UNIQUE KEY table_line.
filter = VALUE #( ( 'AA ' ) ( 'LH ' ) ( 'UA ' ) ).
cl_demo_output=>display( FILTER #(
carriers IN filter WHERE carrid = table_line ) ).
... USING KEY keyname
Wirkung
Angabe des Tabellenschlüssels keyname, mit welchem die Auswertung der WHERE-Bedingung erfolgt. Es kann ein sortierter Schlüssel oder ein Hash-Schlüssel der Filtertabelle hinter ftab oder der Ausgangstabelle hinter itab angegeben werden. Es kann der primäre Tabellenschlüssel oder ein sekundärer Tabellenschlüssel sein, der über primary_key oder den entsprechenden Namen angegeben wird.
Hinweis
Für welche der Tabellen ein Schlüssel angegeben wird, hängt von der dadurch zu erzielenden Optimierung ab.
Beispiel
Wie das vorhergehende Beispiel, wobei hier der Zusatz USING KEY für eine der Tabellen verwendet werden muss, da die interne Tabelle filter eine Standardtabelle ohne Primärschlüssel ist.
SELECT *
FROM scarr
INTO TABLE @DATA(carriers).
DATA filter TYPE STANDARD TABLE OF scarr-carrid
WITH EMPTY KEY
WITH UNIQUE SORTED KEY line COMPONENTS table_line.
filter = VALUE #( ( 'AA ' ) ( 'LH ' ) ( 'UA ' ) ).
cl_demo_output=>display( FILTER #(
carriers IN filter USING KEY line
WHERE carrid = table_line ) ).
Beispiel
Wie das vorhergehende Beispiel, wobei der Zusatz USING KEY hier für die andere Tabelle verwendet wird.
DATA carriers TYPE SORTED TABLE OF scarr
WITH UNIQUE KEY carrid.
SELECT *
FROM scarr
INTO TABLE carriers.
DATA filter TYPE STANDARD TABLE OF scarr-carrid
WITH EMPTY KEY.
filter = VALUE #( ( 'AA ' ) ( 'LH ' ) ( 'UA ' ) ).
cl_demo_output=>display( FILTER #(
carriers USING KEY primary_key IN filter
WHERE carrid = table_line ) ).
... WHERE c1 op f1 [AND c2 op f2 [...]]
Wirkung
Hinter WHERE muss eine Bedingung für den im FILTER-Ausdruck verwendeten Tabellenschlüssel angegeben werden:
Die Verknüpfung mehrerer Vergleiche darf nur mit AND erfolgen. Außer den genannten Vergleichen für Schlüsselkomponenten darf es keine weiteren Vergleiche geben. Bei der Variante mit Filtertabelle sind für die rechten Operanden f1, f2, ... Schlüsselkomponenten der Filtertabelle ftab anzugeben. Auf der linken Seite sind beliebige Komponenten der internen Tabelle itab anzugeben, die zur rechten Seite kompatibel sind.
Hinweise
Ausführbare Beispiele