ABAP Keyword Documentation → ABAP - Reference → Processing External Data → ABAP - Database Accesses → Open SQL → Open SQL - Read Accesses → SELECT → SELECT - cond
WHERE - FOR ALL ENTRIES
Other versions: 7.31 | 7.40 | 7.54
Syntax
... FOR ALL ENTRIES IN itab WHERE ... col operator itab-comp ...
Effect
If the addition FOR ALL ENTRIES
is specified before the language element
WHERE
of the SELECT
statement, the components
comp
of the internal table itab
specified there
can be used in sql_cond
as the operands of comparisons with
relational operators. The specified component
comp
must be compatible with the column col
. The internal table itab
can have a structured or an elementary row type. For an elementary row type, the
pseudo component table_line
must be specified for comp
.
The entire logical expression sql_cond
is evaluated for each individual row of the internal table itab
. The result
set of the SELECT
statement is the union set of the result sets produced
by the individual evaluations. Rows that appear in duplicate are removed from the result set automatically.
If the internal table itab
is empty, the entire WHERE
condition is ignored and all rows from the database are placed in the result set.
The logical expression sql_cond
of the WHERE
condition can comprise multiple logical expressions using
AND and OR
. However, if FOR ALL ENTRIES
is specified, there must be at least one
comparison with a column of the internal table
itab
that can be specified statically or dynamically. In a SELECT
statement with FOR ALL ENTRIES
, the addition
ORDER BY
can only be used with the addition PRIMARY KEY
.
Notes
- The addition
FOR ALL ENTRIES
is only possible beforeWHERE
conditions of theSELECT
statement.
- The same internal table can be specified after
FOR ALL ENTRIES
and afterINTO
. The content of the table is evaluated byFOR ALL ENTRIES
and then overwritten by theINTO
clause.
- With duplicated rows in the resulting set, the addition
FOR ALL ENTRIES
has the same effect as when the additionDISTINCT
is specified in the definition of the selection set. UnlikeDISTINCT
, the rows are not always deleted from the database system but instead are sometimes first deleted from the result set on the application server. The duplicate rows are then removed from the database system if theSELECT
statement can be passed to the database system as a single SQL statement. If theSELECT
statement has to be distributed to multiple SQL statements, the aggregation takes place on the application server.
- The addition
FOR ALL ENTRIES
ignores SAP bufferung for
- Tables with single record buffering.
- Tables with generic buffering if the condition after
FOR ALL ENTRIES
prevents precisely one generic area from being specified exactly.
FOR ALL ENTRIES
can be a more efficient alternative to
join expressions.
- If duplicated rows are first removed from the application server, all rows specified by the
WHERE
condition (in some cases) are passed to an internal system table and then aggregated. The maximum size of this system table is restricted to that of normal internal tables. In particular, the system table is always required if one of the additionsPACKAGE SIZE
orUP TO n ROWS
is used simultaneously. These then have no effect on the number of rows passed from the database server to the application server, but are only used when the rows are passed from the system table to the actual target area.
Example
Gets all flight data for a specified departure city. The relevant airlines and flight numbers are first
passed to an internal table entry_tab
, which is evaluated in the WHERE
condition of the subsequent SELECT
statement. This selection could also be
carried out in a single SELECT
statement by using a join in the FROM
clause.
PARAMETERS p_city TYPE spfli-cityfrom.
TYPES: BEGIN OF entry_tab_type,
carrid TYPE spfli-carrid,
connid TYPE spfli-connid,
END OF entry_tab_type.
TYPES: BEGIN OF result_tab_type,
carrid TYPE sflight-carrid,
connid TYPE sflight-connid,
fldate TYPE sflight-fldate,
END OF result_tab_type.
DATA: entry_tab TYPE TABLE OF entry_tab_type,
result_tab TYPE SORTED TABLE OF result_tab_type
WITH UNIQUE KEY carrid connid fldate.
SELECT carrid connid
FROM spfli
INTO CORRESPONDING FIELDS OF TABLE entry_tab
WHERE cityfrom = p_city.
IF entry_tab IS NOT INITIAL.
SELECT carrid connid fldate
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE result_tab
FOR ALL ENTRIES IN entry_tab
WHERE carrid = entry_tab-carrid AND
connid = entry_tab-connid.
ENDIF.