Application Development 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: 

join between tables

Former Member
0 Kudos

what is wrong :

SELECT viser02~sdaufnr

FROM (viser02 INNER JOIN vbak

ON vbakvbeln = viser02sdaufnr

AND vbakposnr = viser02posnr

INNER JOIN vbap

ON vbapvbeln = viser02sdaufnr

AND vbapposnr = viser02posnr)

where vbak~auart = 'WV'

and ( vbap~sobkz <> 'V'

OR vbap~sobkz <> 'W' ).

4 REPLIES 4

athavanraja
Active Contributor
0 Kudos

SELECT viser02~sdaufnr

FROM <b>(</b>viser02 INNER JOIN vbak

ON vbakvbeln = viser02sdaufnr

AND vbakposnr = viser02posnr

INNER JOIN vbap

ON vbapvbeln = viser02sdaufnr

AND vbapposnr = viser02posnr<b>)</b>

where vbak~auart = 'WV'

and ( vbap~sobkz <> 'V'

OR vbap~sobkz <> 'W' ).

remove the highlighted brackets.

SELECT viser02~sdaufnr

FROM viser02 INNER JOIN vbak

ON vbakvbeln = viser02sdaufnr

AND vbakposnr = viser02posnr

INNER JOIN vbap

ON vbapvbeln = viser02sdaufnr

AND vbapposnr = viser02posnr

where vbak~auart = 'WV'

and ( vbap~sobkz <> 'V'

OR vbap~sobkz <> 'W' ).

Regards

Raja

Former Member
0 Kudos

Yehiel,

Change the Code to the following:

SELECT viser02~sdaufnr

FROM ((viser02

INNER JOIN vbak

ON vbakvbeln = viser02sdaufnr

AND vbapposnr = viser02posnr)

INNER JOIN vbap

ON vbapvbeln = viser02sdaufnr

AND vbapposnr = viser02posnr)

where vbak~auart = 'WV'

and (vbap~sobkz <> 'V'

OR vbap~sobkz <> 'W') .

Thanks

Kam

Former Member
0 Kudos

Hi use the following code.

select viser02~sdaufnr

into table itab from ( ( viser02 as viser02 inner join vbak as vbak on vbakvbeln = viser02sdaufnr and vbakposnr = viser02posnr )

( inner join vbap as vbap on vbapvbeln = viser02sdaufnr AND vbapposnr = viser02posnr ) where vbakauart = 'WV' and vbapsobkz <> 'V' OR vbap~sobkz <> 'W' ).

Former Member
0 Kudos

Hi,

Write the join as follows

DATA: BEGIN OF ITAB_AUFNR OCCURS 0,

SDAUFNR LIKE VISER02-SDAUFNR,

END OF ITAB_AUFNR.

SELECT viser02~sdaufnr

INTO TABLE ITAB_AUFNR

FROM viser02

INNER JOIN vbak

ON vbakvbeln = viser02sdaufnr

INNER JOIN vbap

ON vbapvbeln = viser02sdaufnr

AND vbapposnr = viser02posnr

where vbak~auart = 'WV'

and ( vbapsobkz <> 'V' OR vbapsobkz <> 'W' ).

The problem with your join is in VBAK there will not be any item field(POSNR) and you also didn't specify the into clause.

As a best practice do not use negative conditions in where cluases, they will consume more time. There will be two options to eliminate this.

1. Populate ranges table with all the allowed values for the SOBKZ field and use it in where clause.

OR

2. Populate ranges table with the not required values with the sign option 'E' (Exclude).

If you need any further help let me know.

Thanks

Giridhar