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 - whats wrong?

Former Member
0 Likes
1,350

Hello there,

I was trying to make an Inner Join, but unfortunately without success.

there is the code, can someone pls tell me what is wrong??

&----


.

DATA: gs_mara TYPE mara,
      gt_mara TYPE STANDARD TABLE OF mara.
DATA: gs_marc TYPE marc,
      gt_marc TYPE STANDARD TABLE OF marc.
DATA: gs_makt TYPE makt,
      gt_makt TYPE STANDARD TABLE OF makt.
DATA: gs_t001w TYPE t001w,
      gt_t001w TYPE STANDARD TABLE OF t001w.


TYPES: BEGIN OF ts_ausgabe,
       matnr TYPE matnr,
       mtart TYPE mtart,
       matkl TYPE matkl,
       meins TYPE meins,
       werks TYPE werks_d,
       dispo TYPE dispo,
       adrnr TYPE adrnr,
       END OF ts_ausgabe.

DATA: gs_ausgabe TYPE ts_ausgabe.
DATA: gt_ausgabe TYPE STANDARD TABLE OF ts_ausgabe.



SELECT-OPTIONS: pr_matnr FOR gs_mara-matnr,
                pr_werks FOR gs_marc-werks.

START-OF-SELECTION.


  select a~matnr b~werks c~dispo d~adrnr e~mtart f~matkl g~meins
  INTO CORRESPONDING FIELDS OF TABLE gt_ausgabe
  FROM        mara AS a  INNER  JOIN marc AS b 
  ON b~matnr = a~matnr
  INNER  JOIN marc AS c  ON c~matnr = a~matnr
  INNER JOIN t001w AS d  ON d~werks = a~matnr  
  INNER  JOIN mara AS e  ON e~matnr = a~matnr
  INNER  JOIN mara AS f  ON f~matnr = a~matnr
  INNER  JOIN mara AS g  ON g~matnr = a~matnr


  where a~matnr = pr_matnr
    and b~werks = pr_werks
    and c~dispo = pr_dispo
    and d~adrnr = pr_adrnr
    and e~mtart = pr_mtart
    and f~matkl = pr_matkl
    and g~meins = pr_meins.
  
  write: / matnr dispo adrnr mtart matkl meins.


    LOOP AT gt_mara INTO gs_mara.
      READ TABLE gt_marc INTO gs_marc WITH KEY matnr = gs_mara-matnr.

      IF sy-subrc = 0.
        MOVE: gs_mara-matnr TO gs_ausgabe-matnr,
              gs_mara-mtart TO gs_ausgabe-mtart,
              gs_mara-matkl TO gs_ausgabe-matkl,
              gs_mara-meins TO gs_ausgabe-meins,
              gs_marc-werks TO gs_ausgabe-werks,
              gs_marc-dispo TO gs_ausgabe-dispo,
              gs_t001w-adrnr TO gs_ausgabe-adrnr.

        WRITE: / gs_mara-matnr, gs_mara-mtart, gs_mara-matkl, gs_mara-meins, gs_marc-werks, gs_marc-dispo, gs_t001w-adrnr.
        APPEND gs_ausgabe TO gt_ausgabe.
      ENDIF.
    ENDLOOP.

    LOOP AT gt_ausgabe INTO gs_ausgabe.

      WRITE: / sy-vline, gs_ausgabe-matnr,
               sy-vline, gs_ausgabe-mtart,
               sy-vline, gs_ausgabe-matkl,
               sy-vline, gs_ausgabe-meins,
               sy-vline, gs_ausgabe-werks,
               sy-vline, gs_ausgabe-dispo,
               sy-vline, gs_ausgabe-adrnr.
      ULINE.
    ENDLOOP.

Edited by: Thomas Zloch on Jun 20, 2011 10:19 AM - code tags added

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,307

Hi,

check below statement...

select amatnr bwerks bdispo cadrnr amtart amatkl a~meins

INTO CORRESPONDING FIELDS OF TABLE gt_ausgabe

FROM mara AS a

INNER JOIN marc AS b

ON bmatnr = amatnr

INNER JOIN t001w AS c ON

cwerks = bwerks

where a~matnr in pr_matnr and

b~werks in pr_werks

Ram.

12 REPLIES 12
Read only

ThomasZloch
Active Contributor
0 Likes
1,307

Please define "without success", syntax error, short dump, too much data, missing data?

Thomas

Read only

0 Likes
1,307

well first thank you for the quick respond.

Im quite sure that I have a problem with the structure of the Inner Join, but I dont find the problem...

Read only

0 Likes
1,307

I think REA nailed it down already

Plus, why are you joining MARA four times and MARC twice? You seem to be joining once per field required, not necessary, once per table is fine.

Thomas

http://help.sap.com/abapdocu_702/en/abapselect_join.htm

Edited by: Thomas Zloch on Jun 20, 2011 10:32 AM

Read only

0 Likes
1,307

hi ,

use this query

select a~matnr b~werks b~dispo adrnr mtart matkl meins
  INTO CORRESPONDING FIELDS OF TABLE gt_ausgabe
  FROM        mara AS a  INNER  JOIN marc AS b
  ON b~matnr = a~matnr
*  INNER  JOIN marc AS c  ON c~matnr = a~matnr
  INNER JOIN t001w AS d  ON d~werks = b~werks  
  where a~matnr = pr_matnr
    and b~werks = pr_werks
    and c~dispo = pr_dispo
    and adrnr = pr_adrnr
    and mtart = pr_mtart
    and matkl = pr_matkl
    and meins = pr_meins.

Why you are using mara table and marc table multiple times ?

regards

Deepak.

Edited by: Deepak Dhamat on Jun 20, 2011 10:31 AM

Read only

0 Likes
1,307

Mara is 4 times in JOIn as "a", "e", "f" and "g".

One time would be enough! Use only MARA as "a".

Regards

Klaius

Read only

0 Likes
1,307

well, I will try it in other way...

I have these values, which i have to unify in one table:

from mara:

matnr, mtart, matkl, meins

from marc:

werks, dispo, matnr

from makt:

matnr

from t001w:

werks, adrnr

my way is to build a new table, and with inner join to fill the new table.

is the way that I wrote is right?

thank you all for your time!

Read only

0 Likes
1,307

hi ,

There is no need to build new table , just use above query where

you will get all data in your internal table

then use that table for further processing .

regards

Deepak.

Read only

Former Member
0 Likes
1,307

Hi Kfir,


   select a~matnr b~werks c~dispo d~adrnr e~mtart f~matkl g~meins
   INTO CORRESPONDING FIELDS OF TABLE gt_ausgabe
   FROM        mara AS a  INNER  JOIN marc AS b 
   ON b~matnr = a~matnr
   INNER  JOIN marc AS c  ON c~matnr = a~matnr
   INNER JOIN t001w AS d  ON d~werks = a~matnr  
   INNER  JOIN mara AS e  ON e~matnr = a~matnr
   INNER  JOIN mara AS f  ON f~matnr = a~matnr
   INNER  JOIN mara AS g  ON g~matnr = a~matnr
 

joining t001werks on maramatnr will not work...

Regards

REA

Read only

Former Member
0 Likes
1,308

Hi,

check below statement...

select amatnr bwerks bdispo cadrnr amtart amatkl a~meins

INTO CORRESPONDING FIELDS OF TABLE gt_ausgabe

FROM mara AS a

INNER JOIN marc AS b

ON bmatnr = amatnr

INNER JOIN t001w AS c ON

cwerks = bwerks

where a~matnr in pr_matnr and

b~werks in pr_werks

Ram.

Read only

0 Likes
1,307

ohh, I think that I get it:

when I write ´´ amatnr ´´ I dont really mean to the value ``matnr`` that exist in mara, but this ´´a´´ refer to the whole DB mara/marc...

thank you !

Read only

0 Likes
1,307

Hi,

if you have

mara as a

a~matnr refers to mara-matnr, not to marc-matnr!

Regards,

Klaus

Edited by: Klaus Babl on Jun 20, 2011 11:18 AM

Read only

0 Likes
1,307

ok thank you. now I understand it better !