‎2008 Mar 28 4:37 AM
HI Frds
I have inner join three tables MARA, MARD, MKPF .In DEV its working correctly ,while going for bulk datas it will work correct.?
Pls check my select statement and give me some tips.
-
SELECT MSEGMBLNR MSEGMJAHR MSEGMATNR MSEGWERKS MSEG~BUKRS
MSEGLGORT MSEGLIFNR MSEGMENGE MSEGMEINS MSEG~EBELN
MSEGEBELP MSEGINSMK
MARDMATNR MARDINSME
MKPFMBLNR MKPFMJAHR MKPF~BUDAT
INTO TABLE IMSEG_MARD FROM MSEG
INNER JOIN MARD ON MARDMATNR = MSEGMATNR
INNER JOIN MKPF ON MKPFMBLNR = MSEGMBLNR
WHERE MSEG~WERKS IN PLANT AND
MSEG~BUKRS IN COMPANY AND
MSEG~LIFNR IN VENDOR AND
BUDAT IN GR_DATE AND
MSEG~INSMK EQ 'X' AND
MARD~INSME <> '0.000'.
CLEAR : IMSEG_MARD.
-
thanks
Pari
‎2008 Mar 28 4:43 AM
hi,
it will work fine even though you have bunch of data in DEV/Quality/Prod.
if you have more than 3 tables then its better to use for all entries with respect to performance point of view.
Chandra
‎2008 Mar 28 4:46 AM
‎2008 Mar 28 4:48 AM
hi,
do
SELECT MSEGMBLNR MSEGMJAHR MSEGMATNR MSEGWERKS MSEG~BUKRS
MSEGLGORT MSEGLIFNR MSEGMENGE MSEGMEINS MSEG~EBELN
MSEGEBELP MSEGINSMK
MARDMATNR MARDINSME
MKPFMBLNR MKPFMJAHR MKPF~BUDAT
INTO TABLE IMSEG_MARD FROM MSEG
INNER JOIN MARD ON MSEGMATNR = MARDMATNR
INNER JOIN MKPF ON MSEGMBLNR = MKPFMBLNR
WHERE MSEG~WERKS IN PLANT AND
MSEG~BUKRS IN COMPANY AND
MSEG~LIFNR IN VENDOR AND
BUDAT IN GR_DATE AND
MSEG~INSMK EQ 'X' AND
MARD~INSME EQ '0.000'.
CLEAR : IMSEG_MARD .
‎2008 Mar 28 4:51 AM
HI,
Do avoid Inner Join.please use For all Entries.
Regards,
S.Nehru.
‎2008 Mar 28 4:52 AM
Hi,
1.Inorder to improve the performance of your query , make sure that the order of fields in the "WHERE" should follow the order of fields in the DDIC TABLES
2. use SQL trace to point out the performance of your query while executing with data.
reward if helpful.
~Lakshmiraj~
‎2008 Mar 28 4:55 AM
Hi RAJA
You havent mwentioned INTO CORRESPONDIN FIELDS OF
and no BRACKETS MENTIONED which i've made BOLD..
SELECT MSEGMBLNR MSEGMJAHR MSEGMATNR MSEGWERKS MSEG~BUKRS
MSEGLGORT MSEGLIFNR MSEGMENGE MSEGMEINS MSEG~EBELN
MSEGEBELP MSEGINSMK
MARDMATNR MARDINSME
MKPFMBLNR MKPFMJAHR MKPF~BUDAT
INTO CORRESPONDING FIELDS OF TABLE IMSEG_MARD FROM ((MSEG
INNER JOIN MARD ON MARDMATNR = MSEGMATNR)
INNER JOIN MKPF ON MKPFMBLNR = MSEGMBLNR)
WHERE MSEG~WERKS IN PLANT AND
MSEG~BUKRS IN COMPANY AND
MSEG~LIFNR IN VENDOR AND
BUDAT IN GR_DATE AND
MSEG~INSMK EQ 'X' AND
MARD~INSME '0.000'.
CLEAR : IMSEG_MARD.
Regards
Lakshman
‎2008 Mar 28 5:02 AM
Hi,
If you use it like below then it will be more efficient.
SELECT MBLNR MJAHR MATNR WERKS BUKRS
LGORT LIFNR MENGE MEINS EBELN
EBELP INSMK
FROM MSEG INTO CORRESPONDING FIELDS OF TABLE IT_MSEG.
IF IT_MSEG IS NOT INITIAL.
SELECT
MATNR INSME
FROM MARD
INTO CORRESPONDING FIELDS OF TABLE IT_MARD
FOR ALL ENTRIES IN IT_MSEG
WHERE MATNR = IT_MSEG-MATNR.
ENDIF.
IF IT_MSEG_MARD IS NOT INITIAL.
SELECT
MBLNR MJAHR BUDAT
FROM MKPF
INTO CORRESPONDING FIELDS OF TABLE
FOR ALL ENTRIES IN IT_MSEG_MARD
WHERE MBLNR = IT_MSEG_MARD-MBLNR.
AND MATNR = IT_MSEG_MARD-MATNR.
AND
MSEG-WERKS IN PLANT AND
MSEG-BUKRS IN COMPANY AND
MSEG-LIFNR IN VENDOR AND
BUDAT IN GR_DATE AND
MSEG-INSMK EQ 'X' AND
MARD-INSME EQ '0.000'.
ENDIF.
CLEAR : ITMSEG_MARD.
HTH
Regards,
Dhruv Shah