left join시 데이터가 없어 null인경우와 아닌 경우 0 6 496

by 동글222 [2018.11.21 21:48:43]


안녕하세요.

초보 개발자 입니다.

 

TABLE A                                                                      TABLE B

CODE(PK)  PART(PK)  NUMB(PK)  NAME                 CODE(PK)   PART(PK)  NUMB(PK)   BANK(PK)

    1            1             101         민수                      1            1             102           우리

    1            1             102         철수

    

TABLE C

CODE(PK)    PART(PK)   NUMB(PK)   BANK

    1               1            101           국민

    1               1            102           국민

 

위와 같이 테이블이 있을 때,

A가 주 테이블이고, B와 C는 A테이블에 LEFT OUTER JOIN이 걸려있습니다.

이때 B테이블에 A테이블의 CODE, PART, NUMB과 일치하는 데이터가 있으면 B테이블의 BANK컬럼을 SELECT하고,

존재하지 않으면 C테이블의 BANK컬럼을 조회하고 싶습니다.

 

LEFT JOIN했을 시 B테이블에 데이터가 존재하지 않으면 NULL로 나오는 것을 이용하면 될 것 같은데..

잘 모르겠습니다.ㅜㅜ

 

결과

CODE    PART    NUMB   NAME   BANK

  1          1          101       민수     국민

  1          1          102       철수      우리

 

답변 주시면 감사하겠습니다..

by 마농 [2018.11.22 07:46:47]
SELECT a.code
     , a.part
     , a.numb
     , a.name
     , NVL(b.bank, c.bank) bank
  FROM table_a a
  LEFT OUTER JOIN table_b b
    ON a.code = b.code 
   AND a.part = b.part 
   AND a.numb = b.numb
  LEFT OUTER JOIN table_c c
    ON a.code = c.code 
   AND a.part = c.part 
   AND a.numb = c.numb
;

 


by 동글222 [2018.11.22 08:29:24]

답변 감사합니다!ㅠㅠ

그런데 제가 불러와야 하는 테이블은 bank도있고

다른 여러 컬럼도있는데요.

컬럼같은경우는 답변주신것처럽 nvl사용하여 조회하면되는데

예를들어 null이면 "허용" null이 아니면 "비허용" 으로 텍스트를 찍어가져오려면

Pk값 중 하나로 null체크를 해도 될까요?


by 마농 [2018.11.22 08:46:50]

질문이 모호해요.
null 이면? null 이 아니면? 의 주체가 뭔지 표현이 안되어 있네요.
구체적인 예를 들어 주세요. 위 원본 대비 결과표처럼


by 동글222 [2018.11.22 10:08:35]

결과

CODE    PART    NUMB   NAME   BANK      RMK

              1          1          101       민수     국민      허용

              1          1          102       철수      우리     비허용

 

RMK라는 명칭으로 1동 101호는 B테이블에 존재하지 않으니 "허용"이라고 출력하고, 102호는 B테이블에 존재하므로 "비허용"이라고 출력하고 싶습니다..!


by 마농 [2018.11.22 10:41:39]
SELECT a.code
     , a.part
     , a.numb
     , a.name
     , NVL(b.bank, c.bank) bank
     , NVL2(b.code, '비허용', '허용') rmk
  FROM table_a a
  LEFT OUTER JOIN table_b b
    ON a.code = b.code 
   AND a.part = b.part 
   AND a.numb = b.numb
  LEFT OUTER JOIN table_c c
    ON a.code = c.code 
   AND a.part = c.part 
   AND a.numb = c.numb
;

 


by 동글222 [2018.11.22 13:25:12]

정말 감사합니다! ㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입