아래는 상품데이터를 페이지하는 쿼리입니다.
SORT ORDER BY STOPKEY 와 SORT ORDER BY 쿼리의 결과가 서로 상이하여 문의 드립니다.
SORT ORDER BY STOPKEY 또한 rownum <= X의 "x" 만큼의 수량을 가지고 row 수만큼 반복하여 소팅을 하는 방법의 하나인데 결과 값이 서로 상이 한경우가 발생합니다. oracle 버그일까요?
아니면 혹시 아래 쿼리를 수정해서 해결하는 방법이 있을까요?
참고로 order by NORM.UPD_DTTM 컬럼은 인덱스가 없습니다.
-- SORT ORDER BY
SELECT y.*
FROM (SELECT ROWNUM AS rnum, x.*
FROM (SELECT PROD.RP_ID,
REP.DPR_ID,
NORM.NP_ID,
PROD.PROD_NM,
FROM XXXXX_PROD PROD
INNER JOIN XXXXX_REP_PROD REP
ON PROD.RP_ID = REP.RP_ID
INNER JOIN XXXXX_NORM_PROD NORM
ON REP.DPR_ID = NORM.DPR_ID
WHERE (PROD.CTS_TP_CD = 'TV'
AND EXISTS (SELECT PDC.GL_ID
FROM XXXXX_CNTRY PDC
WHERE PDC.GL_ID = PROD.SR_ID
AND PDC.CNTRY_CD != 'KR'))
OR (PROD.CTS_TP_CD = 'KZ'
AND EXISTS (SELECT PDG.GL_ID
FROM XXXXX_GENRE PDG
WHERE PDG.GL_ID = PROD.SR_ID
AND PDG.GENRE_CD = '005'))
ORDER BY NORM.UPD_DTTM DESC
) x
) y
WHERE rnum >= 281
AND rnum <= 300
-- SORT ORDER BY STOPKEY
SELECT y.*
FROM (SELECT ROWNUM AS rnum, x.*
FROM (SELECT PROD.RP_ID,
REP.DPR_ID,
NORM.NP_ID,
PROD.PROD_NM,
FROM XXXXX_PROD PROD
INNER JOIN XXXXX_REP_PROD REP
ON PROD.RP_ID = REP.RP_ID
INNER JOIN XXXXX_NORM_PROD NORM
ON REP.DPR_ID = NORM.DPR_ID
WHERE (PROD.CTS_TP_CD = 'TV'
AND EXISTS (SELECT PDC.GL_ID
FROM XXXXX_CNTRY PDC
WHERE PDC.GL_ID = PROD.SR_ID
AND PDC.CNTRY_CD != 'KR'))
OR (PROD.CTS_TP_CD = 'KZ'
AND EXISTS (SELECT PDG.GL_ID
FROM XXXXX_GENRE PDG
WHERE PDG.GL_ID = PROD.SR_ID
AND PDG.GENRE_CD = '005'))
ORDER BY NORM.UPD_DTTM DESC
) x
WHERE ROWNUM <= 300 /**P*/
) y
WHERE rnum >= 281
|