id 형식을 구분해서 2개의 테이블에서 회원 이름 가져오기 질문 드립니다. 0 2 2,290

by 벌댕 [Tibero] tibero oracle [2021.08.18 14:18:32]


A 테이블

user_id user_salary user_dept user_gender
000001234 4000 100 1
000001235 4300 300 2
ctab00001 3500 100 1
ctab00002 3000 200 1

 

B 테이블

b_user_id (B 회원ID) b_user_name (B 회원 이름)
000001234 홍길동
000001235 장나라

C테이블

c_user_id (C 회원ID) c_user_name (C 회원 이름)
ctab00001 조용필
ctab00002 고길동

 

 

id를 기준으로(a, b테이블과) 조인해서 아래와 같이 불러올 수 있는 방법이 있을까요?

(id형식이 000000000이면 B테이블

             ctab00000이면 C테이블에서 가져온다.)

 

 

select 결과

user_id user_name user_salary user_dept user_gender
000001234 홍길동 4000 100 1
000001235 장나라 4300 300 2
ctab00001 조용필 3500 100 1
ctab00002 고길동 3000 200 1

 

떠오르는건 union인데.. 데이터 수가 너무 많고 페이지 처리도 해야해서 쿼리에서 구분이 가능한 좋은 방법이 있는지 문의드립니다..

by 마농 [2021.08.18 14:48:06]
SELECT a.user_id
     , NVL(b.b_user_name, c.c_user_name) user_name
     , a.user_salary
     , a.user_dept
     , a.user_gender
  FROM t_a a
  LEFT OUTER JOIN t_b b ON a.user_id = b.b_user_id
  LEFT OUTER JOIN t_c c ON a.user_id = c.c_user_id
;

 


by 우주민 [2021.08.18 15:56:33]

b 테이블과 c 테이블의 id 값이 형식 자체가 다르다고 한다면 두 테이블을 union 하는게 제일 현실적이고, 속도에도 문제가 없어 보이긴 하는데요.

페이징 문제는 a 테이블 기준으로 처리하면 될테니까요.

 

select a.*, b.user_name

from t_a a

left outer join (select * from t_b union select * from t_c) b

on a.user_id = b.user_id

 

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