SELECT reviewno, frno, memberno, rating, review_content, r
FROM(
SELECT reviewno, frno, memberno, rating, review_content, rownum as r
FROM (
SELECT reviewno, frno, memberno, rating, review_content
FROM review
WHERE frno=3
ORDER BY reviewno DESC
)
)
WHERE r >= 1 AND r <= 3;
밑에 SELECT문에서 member테이블의 nickname을 가져온것처럼 위에서도 nickname까지 가져오고싶어서 WHERE문을 바꿔야하는데 계속 오류가 뜹니다, 위에것을 어떻게 바꿔야할까요..?
SELECT r.reviewno, r.frno, r.memberno, r.rating, r.review_content , m.nickname
FROM review r, member m
WHERE r.memberno = m.memberno AND frno=3
ORDER BY r.reviewno ASC;
안녕하세요. row_number 함수를 쓰셔도 될듯합니다~
SELECT reviewno, frno, memberno, rating, review_content , nickname FROM ( SELECT r.reviewno, r.frno, r.memberno, r.rating, r.review_content , m.nickname, row_number() over (order by r.reviewno) rn FROM review r, member m WHERE r.memberno = m.memberno AND frno=3 ) WHERE rn <=3
-- 0. 원본 쿼리에 ROWNUM <= 3 조건이 필요합니다. (성능상 중요 포인트)
-- 1. 조인쿼리를 그대로 적용하시면 됩니다.
SELECT reviewno, frno, memberno, rating, review_content, nickname, r
FROM (SELECT reviewno, frno, memberno, rating, review_content, nickname
, ROWNUM AS r
FROM (SELECT r.reviewno, r.frno, r.memberno, r.rating, r.review_content
, m.nickname
FROM review r
, member m
WHERE r.frno = 3
AND r.memberno = m.memberno
ORDER BY r.reviewno DESC
)
WHERE ROWNUM <= 3 -- 중요 --
) r
WHERE r >= 1
AND r <= 3
;
-- 2. 다만 조인 후에 페이징처리 하는 것 보다는 페이징 후에 조인하는게 좋습니다.
-- 3. 페이징 후에 조인을 하게 된다면 조인할때 정렬이 흐트러지지 않도록 주의해야 합니다.
SELECT r.reviewno, r.frno, r.memberno, r.rating, r.review_content, r.r
, m.nickname
FROM (SELECT reviewno, frno, memberno, rating, review_content
, ROWNUM AS r
FROM (SELECT reviewno, frno, memberno, rating, review_content
FROM review
WHERE frno = 3
ORDER BY reviewno DESC
)
WHERE ROWNUM <= 3 -- 중요 --
) r
, member m
WHERE r.r >= 1
AND r.r <= 3
AND r.memberno = m.memberno
ORDER BY r.r
;
-- 4. 조인 대신 스칼라서브쿼리 형태로 사용하셔도 됩니다.
SELECT reviewno, frno, memberno, rating, review_content, r
, (SELECT nickname FROM member WHERE memberno = r.memberno) nickname
FROM (SELECT reviewno, frno, memberno, rating, review_content
, ROWNUM AS r
FROM (SELECT reviewno, frno, memberno, rating, review_content
FROM review
WHERE frno = 3
ORDER BY reviewno DESC
)
WHERE ROWNUM <= 3 -- 중요 --
) r
WHERE r >= 1
AND r <= 3
;