SELECT * FROM ( SELECT CEIL(ROW_NUMBER() OVER (ORDER BY SEQ DESC) / 20) AS page , SEQ AS m_seq , B_IDX , EVENT_NAME , BUSINESS_TYPE , BUSINESS_DETAILED , TARGET , START_DAY , END_DAY , PROGRESS_YN , CASE WHEN BUSINESS_TYPE = 'type1' THEN (SELECT COUNT(B_IDX) AS COUNT FROM TPC_REQUEST_TYPE1_01 a WHERE a.B_IDX = b.B_IDX ) WHEN BUSINESS_TYPE = 'type2' THEN (SELECT COUNT(B_IDX) AS count FROM TPC_REQUEST_TYPE2_01 a WHERE a.B_IDX = b.B_IDX ) WHEN BUSINESS_TYPE = 'type3' THEN (SELECT COUNT(B_IDX) AS count FROM TPC_REQUEST_TYPE3_01 a WHERE a.B_IDX = b.B_IDX ) END AS req_mem ,MAX_MEMBER FROM TPC_REQUEST_REGI b WHERE B_IDX IN( SELECT B_IDX FROM TPC_REQUEST_TYPE1_01 WHERE USER_ID = 'innofly' UNION ALL SELECT B_IDX FROM TPC_REQUEST_TYPE2_01 WHERE USER_ID = 'innofly' UNION ALL SELECT B_IDX FROM TPC_REQUEST_TYPE3_01 WHERE USER_ID = 'innofly' ) --검색쿼리 ) WHERE page = 1
----------------------------------------------
전체적인 로직은 관리자가 교육모임 신청하는 게시물을 등록합니다. 모집하는 폼은 3가지입니다.
관리자가 3가지 폼중 하나를 선택해서 등록하면 사용자가 등록을 하는 것입니다.
관리자가 입력하면 TPC_REQUEST_REGI 테이블에 저장이되고
사용자가 입력하는 테이블은 관리자가 올리는 폼이 type1, type2, type3 이냐에 따라
TPC_REQUEST_TYPE1_01 , TPC_REQUEST_TYPE2_01 , TPC_REQUEST_TYPE3_01
에 저장이 됩니다..
사용자가 내가 신청한게 뭐가 있는지 리스트를 뿌려주는것인데요
신청 테이블 3개를 다 합쳐서 검색을 하는건데 문제는
TPC_REQUEST_TYPE1_01 , TPC_REQUEST_TYPE2_01 , TPC_REQUEST_TYPE3_01
이넘들의 각각의 seq컬럼 값들을 뽑아 와야 하는데 어떻게 해야할지 감이 잘 안오네요 ㅠㅠ
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY b.seq DESC, a.seq DESC) rn , b.seq m_seq , a.seq s_seq FROM tpc_request_regi b , (SELECT 'type1' business_type, b_idx, seq FROM tpc_request_type1_01 UNION ALL SELECT 'type2', b_idx, seq FROM tpc_request_type2_01 UNION ALL SELECT 'type3', b_idx, seq FROM tpc_request_type3_01 ) a WHERE a.b_idx = b.b_idx AND a.business_type = b.business_type AND a.user_id = 'innofly' ) WHERE rn >= :Page * 20 - 20 + 1 AND rn <= :Page * 20 ;
Row_number 를 가공하여 조건을 주면 Top N 쿼리의 Stop 효과가 없습니다.
Row_number 를 가공하지 말고 그대로 사용하여야 합니다.