Inner-Join

ABAP Syntaxbeispiel: Inner-Join benutzen

Beispielcoding: 1, 2 und dreistufigen Inner-Join benutzen (kopieren erlaubt aber auf eigene Gefahr :-))



 
Beim Inner-Join müssen dringend die 'Schlangenlinien' als Trenner zwischen Tabellenname und Feldname verwendet werden. Wenn man das vergisst erzeugt das meistens keinen Syntax-Fehler, aber das Ergebnis des Selects ist fehlerhaft.


Inner Joins gehen natürlich auch als 'select single':

*
* Coded by Thorsten Neubüser - www.4ap.de
*
SELECT SINGLE mbew~lbkum mbew~vmkum mara~meins
FROM mbew inner join mara on mara~matnr = mbew~matnr
into corresponding fields of alv_output
WHERE mbew~mandt = sy-mandt
AND mbew~matnr = it_daten-matnr
AND mbew~bwkey = it_daten-werks
AND mbew~bwtar = ''.

Der doppelte INNER JOIN [über zwei Tabellen]:

* Materialien ermittel
SELECT mara~mtart
marc~matnr marc~werks marc~beskz marc~sobsl
makt~maktx
mbew~bklas

FROM marc INNER JOIN mara
ON marc~matnr = mara~matnr
INNER JOIN makt
ON marc~matnr = makt~matnr
INNER JOIN mbew
ON marc~matnr = mbew~matnr
AND marc~werks = mbew~bwkey

INTO CORRESPONDING FIELDS OF TABLE it_daten

WHERE marc~matnr IN s_matnr
AND marc~werks IN s_werks
AND makt~maktx IN s_maktx
AND makt~spras = sy-langu
AND mara~mtart IN s_mtart
AND marc~beskz IN s_beskz
AND marc~sobsl IN s_sobsl
AND mbew~bklas IN s_bklas
AND mbew~bwtar = ''.
* Alle Einkauspreise raussuchen
SELECT EINA~LIFNR EINA~MATNR
EINE~WERKS
EINE~NETPR EINE~PEINH EINE~WAERS
MAKT-MAKTX
FROM EINA INNER JOIN EINE
ON EINA~INFNR = EINE~INFNR
INNER JOIN MAKT
ON EINA~MATNR = MAKT~MATNR
INTO CORRESPONDING FIELDS OF TABLE EK_INFOS
WHERE EINA~LIFNR IN LIFNR
AND EINA~MATNR IN MATNR
AND EINE~WERKS IN WERKS
AND MAKT-SPRAS = SY-LANGU.

Der dreifache INNER JOIN [über drei Tabellen]:

* Alle Warenbewegungen raussuchen, dazu die Kupfermengen
SELECT ZCZABW~DELNR
ZCZABW~KUNWE ZCZABW~EBELN ZCZABW~EBELP
ZCZABW~MATNR ZCZABW~MENGE ZCZABW~DATUM
EKKO~LIFNR EKKO~EKORG
EKPO~WERKS EKPO~NETPR EKPO~PEINH
* u.U. CU-Preis aus J_1NKGW-J_1NKGW nehmen!!
J_1NEMM~J_1NVGW J_1NEMM~J_1NVGE
ZEPR~WAERS ZEPR~PEINH ZEPR~NETPR
INTO (CUPREISE-DELNR,
CUPREISE-KUNWE, CUPREISE-EBELN, CUPREISE-EBELP,
CUPREISE-MATNR, CUPREISE-MENGE, CUPREISE-DATUM,
CUPREISE-LIFNR, CUPREISE-EKORG,
CUPREISE-WERKS, CUPREISE-EKPO_NETPR, CUPREISE-EKPO_PEINH,
CUPREISE-J_1NVGW, CUPREISE-J_1NVGE,
CUPREISE-ZEPR_WAERS, CUPREISE-ZEPR_PEINH, CUPREISE-ZEPR_NETPR)
FROM ZCZABW INNER JOIN EKKO
ON EKKO~EBELN = ZCZABW~EBELN
INNER JOIN EKPO
ON EKPO~EBELN = ZCZABW~EBELN
AND EKPO~EBELP = ZCZABW~EBELP
INNER JOIN J_1NEMM
* Lieferant wird NICHT berücksichtigt!
ON J_1NEMM~J_1NLIF = ''
AND J_1NEMM~J_1NMAT = ZCZABW~MATNR
AND J_1NEMM~J_1NWRK = EKPO~WERKS
INNER JOIN ZEPR
ON ZEPR~LIFNR = EKKO~LIFNR
AND ZEPR~EKORG = EKKO~EKORG
AND ZEPR~WERKS = EKPO~WERKS
AND ZEPR~MATNR = ZCZABW~MATNR
WHERE ZCZABW~DELNR IN S_DELNR
AND ZCZABW~KUNWE IN S_KUNWE
AND ZCZABW~DATUM IN S_DATUM
AND ZCZABW~STAT01 = 'X' " Wareneingangsstatus
ORDER BY ZCZABW~KUNWE EKKO~EKORG EKPO~WERKS
ZCZABW~EBELN ZCZABW~EBELP.