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 | 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
정도로 까지 밖에 생각을 못하겠네요...
서브쿼리 해야할것같은데 도움좀 요청드립니다.
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;
이렇게 했습니다만 역시나 같습니다./
말씀하신 게 좀 헷갈리는데..
'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'
이렇게 해도 되구요.