안녕하세요,
for all entries를 이용한 조인방법이 궁굼해서 글남깁니다.
여러가지 table을 조인할때 for all entries를 이용해서 하면 더 효과적이라는 글을 봤는데
어떻게 조인해야되는지는 잘 모르겠네요.
초보적인 질문이지만 미리 감사드립니다.
댓글 7
-
바바..
2008.04.03 23:12
-
초보아밥퍼
2008.04.03 23:24
DATA : BEGIN OF IT_MAIN,
MATNR LIKE MARA-MATNR,
WERKS LIKE MARC-WERKS,
END OF IT_MAIN.
DATA : GT_MAIN LIKE IT_MAIN OCCURS 0 WITH HEADER LINE.
********************************************************
IT_MAIN<---- 데이터값존재한다는 전제하에 MARD 레코드 및 기타 레코드.
LOOP AT IT_MAIN.
SELECT MATNR WERKS
INTO TABLE GT_MAIN
FROM MARA AS INNER JOIN MARC AS B ON A~MATNR = B~MATNR
WHERE MATNR EQ IT_MAIN-MATNR
AND WERKS EQ IT_MAIN-WERKS.
ENDLOOP.
이런 의미를 for all entries 를 이용해서 아래와 같이 표현할수 있습니다.
SELECT MATNR WERKS
INTO TABLE GT_MAIN
FROM MARA AS INNER JOIN MARC AS B ON A~MATNR = B~MATNR
FOR ALL ENTRIES IT_MAIN
WHERE MATNR EQ IT_MAIN-MATNR
AND WERKS EQ IT_MAIN-WERKS.
예제로 자재번호, 플랜트로 했으나 다른 필드의 조건값이 될경우 퍼퍼먼스 줄이기 위함임참고가 되시길... 설명은 위에...
-
아싸ㅎ
2008.04.03 23:51
음 초보아밥퍼님 답변을 보면 결국 보통 조인 후 -> 비교 it에있는 값만(row값) it2 에 넣어줄수있는거네요.
바바님 답변에서는
SELECT carrid connid fldate seatsmax seatsocc
INTO TABLE itab_sflight
FROM sflight
FOR ALL ENTRIES IN itab_spfli
WHERE carrid = itab_spfli-carrid
AND connid = itab_spfli-connid.
조인문이 따로 업는데요 필드선택으로 해서 조인처럼 된건가요?
이부분에서 딱히 조인을 걸은것 같진 않은데요..
-
초보아밥퍼
2008.04.04 00:24
For all Entries
Internal table을 database와 비교하면서 사용한다.
인터널 테이블과 데이터 베이스의 비교입니다.
제가 예제로 조인구문을 넣은 것과 바바님의 예제는 뺀것이라고 보심 됩니다.
아래 예제를 참고 하시길.
SELECT kunnr vkorg vtweg kvgr1
INTO CORRESPONDING FIELDS OF TABLE it_knvv
FROM knvv
WHERE vtweg = '40'
GROUP BY kunnr vkorg vtweg kvgr1.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_konv
FROM konv
FOR ALL ENTRIES IN it_sdv01
WHERE knumv = it_sdv01-knumv
AND kposn = it_sdv01-posnr
AND kschl IN ('ZK29', 'ZK30')
AND kdatu >= lv_frdat
AND kdatu <= lv_todat.
보시면 키값으로 조인하긴 조금 무리가 있으실겁니다.
-
비안개
2008.04.04 00:45
제가 알기론 FOR ALL ENTRIES IN을 사용하면 타 TABLE 조인은 못하는 걸로 아는데요..
SELECT A~MATNR
A~MTART
B~LGORT
FROM MARA AS A
INNER JOIN MARD AS B
INTO TABLE LT_MARD
FOR ALL ENTRIES IN LT_LIST
WHERE A~MATNR EQ LT_LIST-VBELN
AND A~LGORT EQ LT_LIST-POSNR.
이렇게 해봤는데 구문 오류 나던데 같이 못 사용하는거 아닌가요?
제가 질문을 이해를 못한건가;; 후움... 테이블 조인 못해요
-
초보아밥퍼
2008.04.04 01:06
SELECT A~MATNR
A~MTART
B~LGORT
FROM MARA AS A
INNER JOIN MARD AS B " ON A~MATNR = B~MATNR "
INTO TABLE LT_MARD
FOR ALL ENTRIES IN LT_LIST
WHERE A~MATNR EQ LT_LIST-VBELN
AND A~LGORT EQ LT_LIST-POSNR.
" " 빠진거 같은데 조인이 안되던가... 쩝쩝
-
아싸ㅎ
2008.04.04 18:10
모두 감사합니다 ^^
For all Entries
Internal table을 database와 비교하면서 사용한다.
두 개의 internal table이 있는 경우 it1에 읽은 내용을 기준으로 database
와 비교하여 일치하는 data를 it2에 넣을 경우 사용한다. 그렇지 않은 경
우 다중구조의 select문을 사용하여야 하므로 performance가 나쁘다.
Quantity-oriented manner로 작동하며, 모든 data는 internal table에 쌓
인다.
적어도 하나의 entry가 있어야 한다. 그렇지 않으면 다음 진행이 제한없이
수행된다.
START-OF-SELECTION.
SELECT carrid connid cityfrom airpfrom cityto airpto deptime arrtime
INTO TABLE itab_spfli.
FROM spfli
WHERE cityfrom IN so_cityf
AND cityto IN so_cityt.
* Check, if at least one dataset is found
IF sy-subrc <> 0. EXIT. ENDIF.
SELECT carrid connid fldate seatsmax seatsocc
INTO TABLE itab_sflight
FROM sflight
FOR ALL ENTRIES IN itab_spfli
WHERE carrid = itab_spfli-carrid
AND connid = itab_spfli-connid.