300x250
728x90

Self Join이란 


# 말 그대로 자신의 테이블에 JOIN을 건다는 뜻.

# 원래 JOIN을 하게 되면 2 개의 테이블 이상 Join을 걸어서 하는 경우가 대다수 일 것이다. 

하지만 2 개 테이블이 아닌 1개 테이블에서 Join이 필요한 경우가 있다. 그때 필요한 것이 Self Join이다.

 

 

Self Join 필요한 이유


 

다음과 같은 테이블이 있다고 해보자.

 

# 우리가 해야 할 것 FPPER 데이터INPER 데이터같은 값가져오는 로직을 만들어야 한다.

만약 가져오게 되면 이런 식으로 가져와야 한다.

 


여기서 한번 어떤 으로 짜야할지 생각해 보고 넘어가 보자.


 

 

 

 

 


만드는 방법 중에는 여러 가지가 있지만 알고 있는 로직은 

# LOOP문을 통해 조건문으로 값은 값이면 가져오고 아니면 정제해 주는 로직

# Alias을 통해 하는 방법도 있음( 맨 밑 )

(다른 방법 있으면 댓글 부탁드립니다!)

 

 

하지만 굳이 LOOP문 사용 안 하고 SQL에서 처리를 할 수 있다. 

 

이럴 때 필요한 것Self Join인 것이다.

# SQL에서 조건문을 통해서 FPPER 하고 INPER 하고 비교를 해서 같으면? 가져오고, 다르면? 안 가져온다.라는 조건을 만들어주면 되는 것이다.

( SELECT 테이블 비교 )

 

 

자 이제 시작해 보자.

 

 

SELECT Self Join 시작하기


# 우선 시작하기 전 기준이 필요하다.

( 당연하겠지만... )

Join 할 때 조건

# KEY 값 

# 비교할 값 

이렇게 정하고 넘어가자.

 

#1. 다시 테이블 데이터를 봐보자.

ZTHRPY_GJ

 

#2. 기본적인 SELECT 선언 ( START-OF-SELECTION )

 

#3. Self Join 추가( 테이블 비교 )

# 다음과 같이 Self Join을 사용할 수 있다.

(로직 설명은 생략)

 

위에서 말했듯이 

Key 값비교할 값 조건을 달아서 자신의 테이블비교함으로 써

이런 식으로 가져오고 싶은 값만 가져올 수가 있다.

  SELECT X~SEQNR,
         X~FPPER,
         X~INPER
    FROM ZTHRPY_GJ AS X
    INNER JOIN ZTHRPY_GJ AS Y  " Self Join "

      ON X~SEQNR EQ Y~SEQNR   " Key 값 "
      AND X~FPPER EQ Y~INPER  " 비교할 값 "

    INTO CORRESPONDING FIELDS OF TABLE @GT_LIST01
    ORDER BY X~SEQNR.

 

 

(2023-11-01 수정)


# Self Join을 통해서 할 수 있는 방법도 있지만 Alias을 통해서 하는 방법도 있다

다음과 같이 ON 조건에 쓰는 것이 아닌 Where 조건에 사용하는 방법도 있다는 점 참고 바란다.

  SELECT X~SEQNR,
         X~FPPER,
         X~INPER
    FROM ZTHRPY_GJ AS X

    INTO CORRESPONDING FIELDS OF TABLE @GT_LIST01
    WHERE X~SEQNR EQ X~SEQNR AND
          X~FPPER EQ X~INPER
    ORDER BY X~SEQNR.

 

 

끝.

 

도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!

728x90