Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

inner join coding

Former Member
0 Likes
1,871

Hi gurus,

Can anyone help me how to change the following select statement into inner join?

SELECT aufnr FROM afpo INTO TABLE i_afpo

WHERE projn = l_afpo-projn

AND aufnr IN

( select AUFNR from AUFK WHERE auart = 'NT01' ).

IF sy-subrc = 0.

LOOP AT i_afpo.

SELECT SINGLE aufpl INTO l_aufpl

FROM afko

WHERE aufnr = i_afpo-aufnr.

IF sy-subrc = 0.

SELECT objnr INTO TABLE i_afvc

FROM afvc

WHERE aufpl = l_aufpl.

\[removed by moderator\]

Thanks & Regards.

Edited by: Jan Stallkamp on Jul 25, 2008 11:00 AM

6 REPLIES 6
Read only

nikhil_chitre
Active Participant
0 Likes
1,288

Hi,

SELECT afpo~aufnr

afko~aufpl

afvc~objnr

FROM afpo INNER JOIN afko ON afpoaufnr = afkoaufnr

INNER JOIN afvc ON afkoaufpl = afvcaufpl

INTO TABLE itab WHERE afpo~projn = (your select Condition )

and afpo~aufnr = (your select Condition)..

I would recommend you not using Inner join as this would give you bad performance isues...

Instead use For all Entries.

Regards,

Nikhil

Read only

Former Member
0 Likes
1,288

Hi, maybe thi will help you.

SELECT AFPOAUFNR AFVCOBJNR

FROM AFKO

JOIN AFPO

ON AFKOAUFNR = AFPOAUFNR

JOIN AUFK

ON AFKOAUFNR = AUFKAUFNR AND

AUFK~AUART = 'NT01'

JOIN AFVC

ON AFKOAUFPL = AFVCAUFPL

INTO (INTERNAL TABLE)

WHERE AFPOPROJN = L_AFPOPROJN.

LOOP AT (INTERNAL TABLE).

...

*filter internal table for your data needed.

ENDLOOP.

PS:please don't write select statement in loop.because it will effect the processing speed.

Read only

0 Likes
1,288

for inner join you need to find the primary keys for the tables you want to join then the join statments will work you can do 4 inner joins in one select statments which is recomended

EX:

SELECT VBRK~VBELN AS VBELN

VBRK~VKORG AS VKORG

VBRK~VTWEG AS VTWEG

VBRP~PRODH AS PRODH

VBRK~FKDAT AS FKDAT

SUM( VBRP~FKLMG ) AS FKLMG

SUM( VBRP~NETWR ) AS NETWR

INTO CORRESPONDING FIELDS OF WA_TAB FROM VBRK AS VBRK JOIN VBRP AS VBRP

ON VBRKVBELN = VBRPVBELN

WHERE VBRP~MATNR = WA_TAB-MATNR

AND VBRP~WERKS = WA_TAB-WERKS

AND VBRK~FKDAT BETWEEN S_DATE-LOW AND S_DATE-HIGH

AND VBRK~VKORG IN S_VKORG

AND VBRK~VTWEG IN S_VTWEG

AND VBRK~FKSTO NE 'X'

AND VBRK~FKART EQ 'ZBI1'

AND ( VBRKVBTYP EQ'M' OR VBRKVBTYP EQ 'P' OR VBRKVBTYP EQ 'O' OR VBRKVBTYP EQ '6'

OR VBRK~VBTYP EQ '5' )

GROUP BY VBRKVBELN VBRKVKORG VBRKVTWEG VBRPPRODH VBRKFKDAT VBRPFKLMG.

Read only

Former Member
0 Likes
1,288

why u go for inner join ? its better to go for For all entries!

Regards

Sas

\[removed by moderator\]

Edited by: Jan Stallkamp on Jul 25, 2008 11:03 AM

Read only

Former Member
0 Likes
1,288

hiii

it is better to use FOR ALL ENTRIES here..if you want to use it then just refer to following code..

SELECT matnr                         " Material Number
    FROM mara
    INTO TABLE i_mara
   WHERE matnr IN s_matnr.


  IF i_mara[] IS NOT INITIAL.
    SELECT matnr                       " Material Number
           werks                       " Plants
           prctr                       " Profit Center
      FROM marc
      INTO TABLE i_marc
       FOR ALL ENTRIES IN i_mara
     WHERE matnr = i_mara-matnr
       AND werks IN s_werks.

  ENDIF.                               " IF i_mara[] IS NOT INITIAL

  i_output = i_marc.

  IF i_marc[] IS NOT INITIAL.

    SELECT matnr                       " Material Number
           werks                       " Plants
           lgort                       " Storage Location
      FROM mard
      INTO TABLE i_mard
       FOR ALL ENTRIES IN i_marc
     WHERE matnr EQ i_marc-matnr
       AND werks EQ i_marc-werks
       AND lgort IN s_lgort.

  ENDIF.                               " IF i_mara[] IS NOT INITIAL

If it is needed to use inner join then just refer to following example in link..it will solve your problem

http://www.sap-img.com/abap/select-statement-with-inner-join-is-taking-forever.htm

regards

twinkal

Read only

former_member787646
Contributor
0 Likes
1,288

Hi

Try the following and check.

SELECT afpo~aufnr INTO TABLE i_afpo FROM AFPO

INNER JOIN AUFK ON AFPOaufnr = AUFKaufnr

WHERE AUFK~auart = 'NT01'.

Hope this would help you.

Murthy

Edited by: Kalyanam Seetha Rama Murthy on Jul 25, 2008 10:00 AM