요청사항이 한강의에 15차시까지 다 보고 16차시의 강의 시작시간은 있는데 종료시간이 없는 회원을 골라달라고 해서
SELECT USER_ID FROM USERSCOINFO WHERE IDENTIFIER = 'CRS20150120103556300' AND START_DT IS NOT NULL AND END_DT IS NULL GROUP BY USER_ID HAVING COUNT(IDENTIFIER) = 16
이렇게 해서 잘 뽑았습니다.
그런데 해당 아이디로 LECTURE_STUDENT 테이블에 PASS_YN = 'N' 일때만 나오게 해달라고 하더군요. 그래서
SELECT a.USER_ID FROM USERSCOINFO a, LECTURE_STUDENT b WHERE IDENTIFIER = 'CRS20150120103556300' AND a.START_DT IS NOT NULL AND a.END_DT IS NULL AND a.USER_ID = b.USER_ID AND b.PASS_YN = 'N' GROUP BY a.USER_ID HAVING COUNT(a.IDENTIFIER) = 16
이렇게 하니 필터링이 이상하게 되네요;; having절이 잘 안되는거 같기도 하고..
방법이 뭐있을까요? ㅠㅠ
SELECT AA.USER_ID FROM ( SELECT USER_ID FROM USERSCOINFO WHERE IDENTIFIER = 'CRS20150120103556300' AND START_DT IS NOT NULL AND END_DT IS NULL GROUP BY USER_ID HAVING COUNT(IDENTIFIER) = 16 ) AA , LECTURE_STUDENT BB WHERE AA.USER_ID = BB.USER_ID AND BB. PASS_YN = 'N' ;
16차시라는 기준을 COUNT로 하면 강의 시작시간은 있는데 종료시간이 없는 개수가
16개 인것 기준으로 가져 올텐데??
좀 이상한거 같지만 원하는 데이터가 잘 나온다고 하시니....
-- 15차까지 수업을 받은 사람들 중 16차의 시작시간은 있지만 종료시간이 없는사람 -- LECTURE_STUDENT 테이블의 PASS_YN이 N인 사람 -- IDENTIFIER가 차수의 고유코드일 것 같아서 해당 건으로 짜봤어요 SELECT A.USER_ID FROM USERSCOINFO A, LECTURE_STUDENT B WHERE A.USER_ID = B.USER_ID AND IDENTIFIER = '16차코드' AND A.START_DT IS NOT NULL AND A.END_DT IS NULL AND B.PASS_YN = 'N' AND EXISTS (SELECT USER_ID FROM USERSCOINFO AA, LECTURE_STUDENT BB WHERE AA.USER_ID = BB.USER_ID AND IDENTIFIER = '15차코드' AND BB.PASS_YN = 'Y' AND USER_ID=A.USER_ID); -- 그런데 짜고나니 좀 이상하네요... -- USERSCOINFO과 LECTURE_STUDENT 테이블을 JOIN 할 때 차수도 같이 조인해야 할 것 같은데... -- 그냥 USER_ID만 가지고 조인하는게 괜찮은지 모르겠네요....