2 for all entries in a single select

Hi all,
        I need to do 2 for all entries in a single select statement.Is there a way out?

Hi,
No you cant use two FOR ALL ENTRIES at a same time.
Use either of following:-
1. Only JOINS
2. One JOIN and one FOR ALL ENTRIES.
3. Use multiple queries to fill multiple internal table and then read these internal table to form a final internal table.
Hope this solves your problem.
Regards,
Tarun

Similar Messages

  • 'FOR ALL ENTRIES' in SELECT statements

    Hi,
    I got a doubt in working of the 'FOR ALL ENTRIES' option in the SELECT statement. Here is my scenarion.
    Table A - Document Header Level (Key: Doc Number)
    Internal Table B - Document Item level (Keys: Doc num and Doc Item).
    So, for each record in Table A, table B will have multiple records.
    In this situation, how the below SELECT will work.
    SELECT <field names> INTO <some internal table>
                         FROM A
                         FOR ALL ENTRIES in B
                         WHERE doc_num = B-doc_num.
    Will the above SELECT result in duplicate records or not?
    (I tested it and found that it doesn't! I was lil surprised and wanted to confirm that)
    Thanks & Regards,
    Sree

    Hi,
    For all entries option basically sorts out the entries in the internal tbale based on the where condition and thus it only picks the unique entries based on the list.
    so indeed your table A is a header one so it will give you only single value. if you go by the reverse way where in look for B for all entries in A it will give you multiple values as table B has multiple values for each value in A.
    Regards,
    Jagath

  • Select -- for all entries.. fetching Duplicates

    Hi,
    Im using a Select- for all entries structure. Actually Select will supress the Duplicates .But i have a table which has 20000 entries , but my select --for all entries fetching around 56000 records..!
    Any idea/ anybody have Experience this kind of Problem..?
    If i sort the internal table would it resolve the proble..? Because its not happening in all cases.. but for few cases only its extracting duplicates.. other times..its supressing the duplicates.
    Appreciate any advise.

    Hi,
    Just check the table is not initial and then write select statement.
    if not internaltable1[] is initial.
    select field into table internaltable2 for all entries in internaltable1 where field1 = internaltable1-field1.
    endif.
    *Then sort the internaltable2
    sort internaltable2 by field.
    delete adjacent dulpcates from internaltable2 comparing field.
    Hope this helps.
    Regards,
    J.Jayanthi

  • For all entries vs. subquery

    saw sap help on performance... & saw that using subquery is better than for all entries?
    i understand that using join may be the best method for joining a few tables..
    for many tables, normally for all entries are used.
    so how about subquery?
    codes by sap..
    Using for all entries...
    SELECT * FROM SPFLI
      INTO TABLE T_SPFLI
      WHERE CITYFROM = 'FRANKFURT'
        AND CITYTO = 'NEW YORK'.
    SELECT * FROM SFLIGHT AS F
        INTO SFLIGHT_WA
        FOR ALL ENTRIES IN T_SPFLI
        WHERE SEATSOCC < F~SEATSMAX
          AND CARRID = T_SPFLI-CARRID
          AND CONNID = T_SPFLI-CONNID
          AND FLDATE BETWEEN '19990101' AND '19990331'.
    ENDSELECT.
    using subquery...
    SELECT * FROM SFLIGHT AS F INTO SFLIGHT_WA
        WHERE SEATSOCC < F~SEATSMAX
          AND EXISTS ( SELECT * FROM SPFLI
                         WHERE CARRID = F~CARRID
                           AND CONNID = F~CONNID
                           AND CITYFROM = 'FRANKFURT'
                           AND CITYTO = 'NEW YORK' )
          AND FLDATE BETWEEN '19990101' AND '19990331'.
    ENDSELECT.

    Hi Charles,
    It is not at all advised to use SELECT...ENDSELECT to fetch data from the database. It would reduce the performance.
    Generally to achieve your query, I will do this.
    SELECT * FROM SFLIGHT
             INTO TABLE IT_SFLIGHT
            WHERE SEATSOCC S_SEATSMAX
              AND FLDATE BETWEEN '19990101' AND '20060331'.
      IF SY-SUBRC = 0.
        LOOP AT IT_SFLIGHT.
          V_TABIX = SY-TABIX.
          SELECT SINGLE * FROM SPFLI
                          INTO WA_SPFLI
                         WHERE CARRID   = IT_SFLIGHT-CARRID
                           AND CONNID   = IT_SFLIGHT-CONNID
                           AND CITYFROM = 'FRANKFRUIT'
                           AND CITYTO   = 'NEW YORK'.
          IF SY-SUBRC <> 0.
            DELETE IT_SFLIGHT INDEX V_TABIX.
          ENDIF.
        ENDLOOP. " IT_SFLIGHT
      ENDIF. " SFLIGHT
    Thanks,
    Sreekanth

  • INNER JOIN with FOR ALL ENTRIES IN Performance ?

    I am using following the following <b>Select using Inner join with For All Entries in.</b>
          SELECT kebeln kebelp kvbeln kvbelp
            FROM ekkn AS k INNER JOIN ekbe AS b ON kebeln = bebeln
                                               AND kebelp = bebelp
            INTO TABLE gi_purchase
             FOR ALL ENTRIES
             IN gi_sales
          WHERE k~mandt EQ sy-mandt
            AND k~vbeln EQ gi_sales-vbeln
            AND k~vbelp EQ gi_sales-posnr
            AND b~budat EQ p_date.
    If i am not doing inner join then I will have to do 2 select with for all entries in on ekkn and ekbe tables and then compare them.
    <b>I want to know which one has better performance
    Inner join with for all entries in
                    or
    2 Selects with for all entries in</b>

    the join is almost aways faster:
    <a href="/people/rob.burbank/blog/2007/03/19/joins-vs-for-all-entries--which-performs-better">JOINS vs. FOR ALL ENTRIES - Which Performs Better?</a>
    <a href="http://blogs.ittoolbox.com/sap/db2/archives/for-all-entries-vs-db2-join-8912">FOR ALL ENTRIES vs DB2 JOIN</a>
    Rob

  • Inner Join with For All Entries - Performance ?

    I am using following the following <b>Select using Inner join with For All Entries in.</b>
          SELECT kebeln kebelp kvbeln kvbelp
            FROM ekkn AS k INNER JOIN ekbe AS b ON kebeln = bebeln
                                               AND kebelp = bebelp
            INTO TABLE gi_purchase
             FOR ALL ENTRIES
             IN gi_sales
          WHERE k~mandt EQ sy-mandt
            AND k~vbeln EQ gi_sales-vbeln
            AND k~vbelp EQ gi_sales-posnr
            AND b~budat EQ p_date.
    If i am not doing inner join then I will have to do 2 select with for all entries in on ekkn and ekbe tables and then compare them.
    <b>I want to know which one has better performance
    Inner join with for all entries in
                    or
    2 Selects with for all entries in</b><b></b>

    An Inner Join with for all entries should be done if you add this....
    IF NOT gi_sales[] IS INITIAL.
    SELECT k~ebeln k~ebelp k~vbeln k~vbelp
    FROM ekkn AS k INNER JOIN ekbe AS b ON k~ebeln = b~ebeln
    AND k~ebelp = b~ebelp
    INTO TABLE gi_purchase
    FOR ALL ENTRIES
    IN gi_sales
    WHERE k~mandt EQ sy-mandt
    AND k~vbeln EQ gi_sales-vbeln
    AND k~vbelp EQ gi_sales-posnr
    AND b~budat EQ p_date.
    ENDIF.
    Also, while you use an index or the complete key for the SELECT, your not going to suffer from lack of performance -;)
    Greetings,
    Blag.

  • Issue with FOR ALL ENTRIES

    Hi All,
    I have used FOR ALL ENTRIES statement in while selecting data based on some other internal table (to avoid select within loop).
    While using FOR ALL ENTRIES, the target table (internal table in which data is getting stored) is getting affected.
    The other fields are becoming zero and several rows gets delerted from the internal table after performing select query.
    How to avoid this bug?
    Kindly help me out....
    Regards
    Pavan

    hi after the for all entries statement did you used the read statement .
    if not you will not get any data ..check this program..
    tables:mara,marc.
    data:begin of itab occurs 0,
         matnr like mara-matnr,
         end of itab.
    data:begin of itab1 occurs 0,
         matnr like marc-matnr,
         werks like marc-werks,
         end of itab1.
    select   matnr
          from mara
          into corresponding fields of  table itab.
          if   itab is initial.
          select  matnr
                  werks
                 from marc
                 into  table itab1
                 for all entries in itab
                 where matnr = itab-matnr.
                 loop at itab1.
                 read table itab with key matnr = itab-matnr.
                 write:/ itab1-matnr,itab1-werks.
                 endloop.
                 endif.

  • Problem with for all entries

    Hi all,
       When i was trying to use for all entries, i am not able to pull records inside my internal table. Though both of the tables have the common key fields between them(and ofcourse have entries in that). Now what i have analyzed was, the first table is having 7 primary keys and the one i am using for 'for all entries' comes 6th. Does this gives any impact in pulling records inside my internal table?.Else please give me a possible solution for this. The alternate statement(a normal select query with * ) that i had used for this reserved my dialog processor for a while. Which resulted in 'time exceeded' short dump.

    Hi,
    The WHERE clause of the SELECT statement has a special variant that allows you to derive conditions from the lines and columns of an internal table:
    SELECT ... FOR ALL ENTRIES IN <itab> WHERE <cond> ...
    <cond> may be formulated as described above. If you specify a field of the internal table <itab> as an operand in a condition, you address all lines of the internal table. The comparison is then performed for each line of the internal table. For each line, the system selects the lines from the database table that satisfy the condition. The result set of the SELECT statement is the union of the individual selections for each line of the internal table. Duplicate lines are automatically eliminated from the result set. If <itab> is empty, the addition FOR ALL ENTRIES is disregarded, and all entries are read.
    The internal table <itab> must have a structured line type, and each field that occurs in the condition <cond> must be compatible with the column of the database with which it is compared. Do not use the operators LIKE, BETWEEN, and IN in comparisons using internal table fields. You may not use the ORDER BY clause in the same SELECT statement.
    You can use the option FOR ALL ENTRIES to replace nested select loops by operations on internal tables. This can significantly improve the performance for large sets of selected data.
    Hope this is useful
    Reema

  • For all entries in join conditions

    Hi All,
                  Can we use for all entries statement in the selection of  joining 4 tables.
    If so, please give me an example.
    Thanks

    Hello,
    U can use it.
    Check this:
    * Get the material classification details
      SELECT A~CUOBJ A~OBJEK A~KLART B~ATINN B~ATZHL B~ATWRT B~ATFLV
             B~ATAWE B~ATFLB B~ATAW1 C~CLINT D~CLASS
        INTO CORRESPONDING FIELDS OF TABLE G_T_OBJECTS
        FROM INOB AS A INNER JOIN AUSP AS B
          ON A~CUOBJ = B~OBJEK AND
             A~KLART = B~KLART
             INNER JOIN KSSK AS C
             ON B~OBJEK = C~OBJEK AND
                B~KLART = C~KLART
             INNER JOIN KLAH AS D
             ON C~CLINT = D~CLINT
         FOR ALL ENTRIES IN L_T_OBJECT
       WHERE A~OBJEK EQ L_T_OBJECT-OBJEK AND
             A~OBTAB EQ 'MARA'  AND
             A~KLART IN S_KLART AND
             B~ADZHL EQ '0000'  AND
             C~LKENZ EQ ' '     AND
             D~CLASS IN S_CLASS.
    If useful reward.
    Vasanth

  • Queries for FOR ALL ENTRIES IN

    1. If I use For all entries in inspite of loop within loop , wil it help in   
        increasing processing time ??
    2. There is one problem in For all entries in , it is not fetching all 
         entries but it left entries having same data so is it like that only
    Please dont pass any link.
    Ankesh.

    Hi,
    SELECT ... FOR ALL ENTRIES IN <itab> WHERE <cond> ..<cond>
    If you specify a field of the internal table <itab>
    as an operand in a condition, you address all lines of the internal table. The comparison is then performed for each line of the internal table. For each line, the system selects the lines from the database table that satisfy the condition. The result set of the SELECT statement is the union of the individual selections for each line of the internal table. Duplicate lines are automatically eliminated from the result set. If <itab> is empty, the addition FOR ALL ENTRIES is disregarded, and all entries are read. The internal table <itab> must have a structured line type, and each field that occurs in the condition <cond> must be compatible with the column of the database with which it is compared. Do not use the operators LIKE, BETWEEN, and IN in comparisons using internal table fields. You may not use the ORDER BY clause in the same SELECT statement. You can use the option FOR ALL ENTRIES to replace nested select loops by operations on
    internal tables. This can significantly improve the performance for large sets of selected data.
    It is also possible to avoid nested SELECT loops by placing the selection from the outer loop in an internal table and then running the inner selection once only using the FOR ALL ENTRIES addition. This technique stems from the time before joins were allowed in the FROM clause. On the other hand, it does prevent redundant data from being transferred from the database.
    Answers for your question is :
    1. If I use For all entries in inspite of loop within loop , wil it help in  increasing processing time ?? : It will Improve your performance.
    2. There is one problem in For all entries in , it is not fetching all entries but it left entries having same data so is it like that only : True it preventsredundant data from being transferred from the database.
    Hope this solves your doubt.
    Plz reward if helpful.
    Thanks,
    Dhanashri.

  • Performance on Select Single&Write  AND Select*(For All Entries)&Read&Write

    Hi Experts,
    I got a code review problem & we are in a argument.
    I need the best performance code out of this two codes. I have tested this both on 5 & 1000 & 3000 & 100,000 & 180,000 records.
    But still, I just need a second opinion of experts.
    TYPES : BEGIN OF ty_account,
            saknr   TYPE   skat-saknr,
            END OF ty_account.
    DATA : g_txt50      TYPE skat-txt50.
    DATA : g_it_skat    TYPE TABLE OF skat,       g_wa_skat    LIKE LINE OF g_it_skat.
    DATA : g_it_account TYPE TABLE OF ty_account, g_wa_account LIKE LINE OF g_it_account.
    Code 1.
    SELECT saknr INTO TABLE g_it_account FROM skat.
    LOOP AT g_it_account INTO g_wa_account.
      SELECT SINGLE txt50 INTO g_txt50 FROM skat
        WHERE spras = 'E'
          AND ktopl = 'XXXX'
          AND saknr = g_wa_account-saknr.
      WRITE :/ g_wa_account-saknr, g_txt50.
      CLEAR : g_wa_account, g_txt50.
    ENDLOOP.
    Code 2.
    SELECT saknr INTO TABLE g_it_account FROM skat.
    SELECT * INTO TABLE g_it_skat FROM skat
      FOR ALL ENTRIES IN g_it_account
          WHERE spras = 'E'
            AND ktopl = 'XXXX'
            AND saknr = g_it_account-saknr.
    LOOP AT g_it_account INTO g_wa_account.
      READ TABLE g_it_skat INTO g_wa_skat WITH KEY saknr = g_wa_account-saknr.
      WRITE :/ g_wa_account-saknr, g_wa_skat-txt50.
      CLEAR : g_wa_account, g_wa_skat.
    ENDLOOP.
    Thanks & Regards,
    Dileep .C

    Hi Dilip.
    from you both the code I have found that you are selecting 2 diffrent fields.
    In Code 1.
    you are selecting SAKNR and then for these SAKNR you are selecting TXT50 from the same table.
    and in Code 2 you are selecting all the fields from SAKT table for all the values of SAKNR.
    I don't know whats your requirement.
    Better you declare a select option on screen and then fetch required fields from SAKT table for the values entered on screen for SAKNR.
    you only need TXT50 and SAKNR fields.
    so declare two types one for SAKNR and another for TXT50.
    Points to be remember.
    1. while using for all entries always check the for all entries table should not be blank.
    2. you will have to fetch all the key fields in table while applying for all entries,
        you can compare key fields with a constant which is greater than initial value.
    3. while reading the table sort the table by the field on which you are going to read it.
    try this:
    TYPES : BEGIN OF ty_account,
    saknr TYPE skat-saknr,
    END OF ty_account.
    TYPES : begin of T_txt50,
          saknr type saknr,
          txt50 type txt50,
    end of t_txt50.
    DATA: i_account type table of t_account,
          w_account type t_account,
          i_txt50 type table t_txt50,
          w_txt50 type t_txt50.
    select SAKNR from SKAT into table i_account.
    if sy-subrc = 0.
    sort i_account by saknr.
    select saknr txt50 from SKAT into table i_txt50
    for all entries in i_account
    where SAKNR = i_account-SAKNR
    here mention al the primary keys and compare them with their constants.
    endif.     
    Note; here you need to take care that, you will have to fetch all the key fields in table i_txt50.
    and compare those fields with there constants which should be greater than initial values.
    they should be in proper sequence.
    now for writing.
    loop at i_account into w_account.
    clear w_txt50.
    sort i_txt50 by saknr.
    read table i_txt50 into w_txt50 with key SAKNR = w_account-saknr
    if sy-subrc = 0.
    write: w_txt50-saknr, w-txt50-txt50.
    clear w_txt50, w_account.
    endif.
    endloop.
    Hope it wil clear your doubts.
    Thanks
    Lalit

  • Selecting single value using for all entries.

    Hi Experts,
    I want to know that is it possible to fetch only the first record for a particular condition while using for all entries.
    For ex:
    Suppose i got 10 different vbeln from vbak table into my internal table it_vbak. For a particular vbeln there can be multiple records in vbap table.
    Now i need to fetch only the first record which is getting from vbap table for different vbeln while using 'for all entries in it_vbak where vbeln = it_vbak-vbeln'. Is it possible?
    Thanks in Advance
    Be$t!N
    Moderator message - Moved to the correct forum
    Edited by: Rob Burbank on Nov 17, 2009 9:38 AM

    Hi Rob Burbank,
    Thanks..
    You are correct.. If that is the scenario in their company... Again it depends on the configuration and business process.. But it's possible that they may need to delete first on any line item after creation of sale order..
    In that case below solution will work..
    IF IT_VBAK[] IS NOT INITIAL.
    SELECT * FROM VBAP
    INTO TABLE IT_VBAP
    for all entries in it_vbak
    where vbeln = it_vbak-vbeln.
    ENDIF.
    SORT IT_VBAP BY VBELN POSNR.
    LOOP AT IT_VBAK INTO WA_VBAK.
    READ TABLE IT_VBAP INTO WA_VBAP WITH KEY VBELN = WA_VBAK-VBELN.
    IF SY-SUBRC = 0.
    APPEND WA_VBAP TO IT_VBAP2. " Another Internal table which stores only first record
    ENDIF.
    CLEAR : WA_VBAP.
    ENDLOOP.
    OR
    IT_VBAP3[] = IT_VBAP[].
    SORT IT_VBAP3 BY VBELN POSNR.
    DELETE ADJACENT DUPLICATES FROM IT_VBAP3 COMPARING VBELN.
    Now Table IT_VBAP2 and IT_VBAP3 will be having only first line items for all sales orders..
    Do some little changes in the code as per your requirement.
    Hope it will solve your problem..
    Thanks & Regards
    ilesh 24x7
    ilesh Nandaniya

  • Performance issue with select query and for all entries.

    hi,
    i have a report to be performance tuned.
    the database table has around 20 million entries and 25 fields.
    so, the report fetches the distinct values of two fields using one select query.
    so, the first select query fetches around 150 entries from the table for 2 fields.
    then it applies some logic and eliminates some entries and makes entries around 80-90...
    and then it again applies the select query on the same table using for all entries applied on the internal table with 80-90 entries...
    in short,
    it accesses the same database table twice.
    so, i tried to get the database table in internal table and apply the logic on internal table and delete the unwanted entries.. but it gave me memory dump, and it wont take that huge amount of data into abap memory...
    is around 80-90 entries too much for using "for all entries"?
    the logic that is applied to eliminate the entries from internal table is too long, and hence cannot be converted into where clause to convert it into single select..
    i really cant find the way out...
    please help.

    chinmay kulkarni wrote:Chinmay,
    Even though you tried to ask the question with detailed explanation, unfortunately it is still not clear.
    It is perfectly fine to access the same database twice. If that is working for you, I don't think there is any need to change the logic. As Rob mentioned, 80 or 8000 records is not a problem in "for all entries" clause.
    >
    > so, i tried to get the database table in internal table and apply the logic on internal table and delete the unwanted entries.. but it gave me memory dump, and it wont take that huge amount of data into abap memory...
    >
    It is not clear what you tried to do here. Did you try to bring all 20 million records into an internal table? That will certainly cause the program to short dump with memory shortage.
    > the logic that is applied to eliminate the entries from internal table is too long, and hence cannot be converted into where clause to convert it into single select..
    >
    That is fine. Actually, it is better (performance wise) to do much of the work in ABAP than writing a complex WHERE clause that might bog down the database.

  • Select statment using FOR ALL ENTRIES  not allow to do sum,

    Hi All,
    SELECT DELIV_NUMB
           SUM( GRS_WGT_DL )
           UNIT_OF_WT
      FROM /BIC/AGSSD000600
      INTO TABLE I_GROSS
      FOR ALL ENTRIES IN I_LAYTWO
      WHERE DELIV_NUMB = I_LAYTWO-DELIV_NUMB
      GROUP BY DELIV_NUMB UNIT_OF_WT.
    While compiling it shows the error
    The addition "FOR ALL ENTRIES" excludes all aggregate functions with
    the exception of "COUNT( * )", as the single element of the SELECT
    clause.
    Please give some solution to do sum
    with regards,
    Thambe .

    You could just select all entries into an internal table and then loop through and use COLLECT or similar to get your sum values.
    Gareth.

  • Dynamic SELECT containing 'FOR ALL ENTRIES'

    Hi,
        I am trying to do a slect from a table in which the table and the field to be selected will be dynamically populated using Field Symbol
    Something like this,
    SELECT * FROM <FS_TABLE>
    INTO CORRESPONDING FIELDS OF TABLE <FS_IT_TABLE>
    FOR ALL ENTRIES IN T_TABLE
    WHERE <FS_FIELD> EQ T_TABLE-FIELD1.
    I know that <FS_FIELD> cannot be used along with 'FOR ALL ENTRIES'. Is there any other way to achieve this?

    Hi!
    Try out the dynamical WHERE conditions then:
    PARAMETERS: column TYPE c LENGTH 8,
                value  TYPE c LENGTH 30.
    DATA spfli_wa TYPE spfli.
    DATA cond_syntax TYPE string.
    CONCATENATE column '= value'
                INTO cond_syntax SEPARATED BY space.
    TRY.
        SELECT SINGLE *
               FROM spfli
               INTO spfli_wa
               WHERE (cond_syntax).
      CATCH cx_sy_dynamic_osql_error.
        MESSAGE `Wrong WHERE condition!` TYPE 'I'.
    ENDTRY.
    Regards
    Tamá

Maybe you are looking for

  • Iphone 6 plus led light not working in 8.3

    I updated to 8.3 a few days ago and have just noticed that my led light does not work. I backed up the phone, reset it to factory settings and it's still not working. Ay ideas on what I can do next?

  • After upgrading to iOS 8.0.2

    After upgrading to iOS 8.0.2 I facing few problem, that its 1) no cellular / no service, i try to take out the sim tray & put it back, its keep searching the network for few hours 2) i try to reset my network in general setting, however when the ipho

  • Oracle 9.0.1 error on RH 133 9.01. Please help

    I am new to Linux please help me. This message occur while i run runInstaller. Xlib: connection to ":0.0" refused by server Xlib: No protocol specified java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPL

  • To handle scrap parts in production kanban

    Hi all We are running kanban production in machining centers. A kanban card is shot to EMPTY to generate a production order before production and then shot to FULL to make goods receiving 101 after production. If there is scrap parts happening during

  • 2 into 1 ?

    I have a Lowe TV - incredibly expensive with excellent picture BUT it has only 1 HDMI input socket and I've currently got a BluRay player using that. Is there any device which will let connect the HDMI output from an Apple TV as well so I can use bot