조인해서 최근데이터 가져오는것 질문드립니다. 고수님들!! 0 3 1,295

by kimk1029 [SQL Query] 조인 서브쿼리 디비 오라클 [2016.06.23 11:31:38]


안녕하세요 초급개발자입니다.

아직 쿼리가 어렵게만느껴지네요 @.@ .. 

조인 + 서브쿼리 하니까 머리가 아프네요..

 

a테이블

a_UID a_email a_TYPE a_INDUSTRY a_NUMBER
12 k@n.com 1 dd 2324331
13 k@n.com 2 qq 2322322
14 k@n.com 1 ww 2324334
15 k@n.com 1 ee 2222222

 

b테이블 

b_uid b_send_date b_createdate b_deletedate b_deleteflag
14 2011-02-03 2011-02-03 2011-02-03 1
14 2011-04-05 2011-02-03 2011-02-03 2
16 2011-02-01 2011-02-03 2011-02-03 1
17 2011-01-31 2011-02-03 2011-02-03 1

 

위에 두테이블이 있다 가정할때 where a.uid = b.uid 를이용해서

14번 uid의 이메일 타입 넘버 그리고 최근 send_date를 뽑고싶습니다.

select a.email, a.type, a.number, b.send_date ?? from a a , b b where a.uid = b.uid

정도로 까지 밖에 생각을 못하겠네요...

서브쿼리 해야할것같은데 도움좀 요청드립니다.

 

by jkson [2016.06.23 12:24:38]
SELECT A.EMAIL
     , A.TYPE
     , A.NUMBER
     , B.SEND_DATE
  FROM (SELECT *
          FROM (SELECT UID
                     , SEND_DATE
                     , CREATEDATE
                     , DELETEDATE
                     , DELETEFLAG
                     , ROW_NUMBER() OVER (PARTITION BY UID ORDER BY SEND_DATE DESC) RN
                  FROM B
                 WHERE UID = '14')
         WHERE RN = 1) B, A
 WHERE B.UID = A.UID

 


by kimk1029 [2016.06.23 13:03:04]

A -> e_member 테이블

B -> e_send_log_sms

일떄.

이렇게 된다면 14번 하나의 uid 에대한 것밖에 못하지않을까요 그리고.

        WHERE UID = '14')
         WHERE RN = 1) B, A

이부분에서 테이블 두개 가 e_send_SMS_log, e_member 가맞을까요 ?

 

 SELECT e_member.EMAIL
     , e_member.ORGTYPE
     , e_member.CONTACTNUMBER
     , e_send_SMS_log.SEND_DATE
  FROM (SELECT *
          FROM (SELECT ROW_NUMBER() OVER (PARTITION BY member_UID ORDER BY SEND_DATE DESC) RN
                  FROM e_send_SMS_log)
         WHERE RN = 1) e_send_SMS_log, e_member
 WHERE e_send_SMS_log.member_UID = e_member.member_UID;

이렇게 했습니다만 역시나 같습니다./


by jkson [2016.06.23 13:27:22]

말씀하신 게 좀 헷갈리는데..

'14번 uid의 이메일 타입 넘버 그리고 최근 send_date를 뽑고싶습니다'

-> 한 건이 나와야 되는 것 아닌가요?

위 데이터에서는 k@n.com, 1, 2324334, '2011-04-05' 이렇게 한 줄이요.

나와야 되는 데이터가 어떤 형태인지 적어주세요.

 

굳이 조인해서 구하지 않을 거면 간단히


SELECT E_MEMBER.EMAIL
     , E_MEMBER.ORGTYPE
     , E_MEMBER.CONTACTNUMBER
     , (SELECT MAX(SEND_DATE) 
          FROM E_SEND_LOG_SMS 
         WHERE UID = E_MEMBER.UID) SEND_DATE
  FROM E_MEMBER
 WHERE UID = '14'

이렇게 해도 되구요.

 

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