안녕하세요 개발중에 다른분이 개발한 내용인데 이해되지 않는 부분이 있어서 질문드립니다.
제가 아는 범위에서 FOR ALL ENTRIES IN <ITAB>의 경우 해당 인터널테이블의 키값으로 중복된 값은 무시하고 조회되는 것으로 알고 있습니다.
그런데 굳이 중복을 제거하고 돌리는 소스를 보았습니다.(노랑색으로 표시!)
---------------------------------------------------------------------------------------
DATA : lt_zmmt2270 LIKE TABLE OF gt_zmmt2270 WITH HEADER LINE,
lv_zmonf LIKE zmmt0011-zmonf,
lv_zmont LIKE zmmt0011-zmont.
FIELD-SYMBOLS : <lt_0011> LIKE zmmt0011.
_clt : gt_zmmt0011, gt_zmmt0011_a.
lt_zmmt2270[] = gt_zmmt2270[].
SORT lt_zmmt2270 BY werks zlifas matnr.
DELETE ADJACENT DUPLICATES FROM lt_zmmt2270 COMPARING werks zlifas matnr.
IF lt_zmmt2270[] IS NOT INITIAL.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_zmmt0011
FROM zmmt0011
FOR ALL ENTRIES IN lt_zmmt2270
WHERE werks EQ lt_zmmt2270-werks
AND zlifas EQ lt_zmmt2270-zlifas
AND matnr EQ lt_zmmt2270-matnr
AND zmonf LE sy-datum+0(6)
AND zmont GE sy-datum+0(6).
---------------------------------------------------------------------------------------
제 생각엔 굳이 DELETE ADJACENT DUPLICATES 를 사용하지 않아도 WHERE절에 키값으로 사용되는 필드 중복을
UNIQUE하게 가져갈 것으로 생각되는데 이유가 있을까요??
테스트해보았을때 데이터 건수는 동일하게 조회됩니다!!
도움 요청드립니다!
댓글 5
-
준서아빠
2019.04.20 02:56
-
아좀더
2019.04.23 03:28
아 속도차이가 있군요..답변 감사합니다!!
그럼 중복제거 여부에 상관없이 같은 결과값이 나오는 것은 맞을까요?실례되지 않는다면 답변주신 것에 추가로.. 궁금증이 생겼는데 만약 위 코드처럼 따로 중복제거를 하지 않는다는 가정하에
FOR ALL ENTRIES IN 같은 경우 중복을 제거하지 않으면 키값 대상으로 모든 데이터 SELECT 후 다시 중복제거를 해서 결과값을 갖는걸까요?
아니면 자체적으로 중복제거를 하고 SELECT를 하게 되나요?
-
1년차
2019.05.30 01:20
명확하지 않지만 가볍게 생각하면 select-option이랑 같다고 보시면됩니다.
A
A
A
B
B를 포함하여 검색하면 A, B에 대한 결과값이 중복이 없이 조회되는 것 처럼요.. 하지만 속도차이가 크니 부디 중복제거를 해주세요
-
DeSong
2019.04.24 01:13
https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abenwhere_logexp_itab.htm 여기 Notes 구분 살펴보시면 답 있어요
-
아좀더
2019.04.24 20:35
궁금증 해결하였습니다 감사합니다!!
lt_zmmt2270 인터널테이블을 중복제거 하는 이유는 SELECT 속도 차이 때문입니다.