mssql페이징 질문합니다. 0 4 1,256

by 김이수 [DB 기타] [2015.08.18 15:56:53]


SELECT *
 			FROM(select Row_Number() Over(Order By H.DIVISION_CD DESC) AS rownum, *
  		from T_HJD_CD_INFO AS H, T_FMY_SITUA AS F
 			WHERE H.DIVISION_CD = SUBSTRING(#{GROUP_NO},1,8)
 		)A
 		
 		WHERE A.rownum BETWEEN #{beginIndex} AND #{endIndex} 

 

페이징처리 + 리스트 목록뿌리는 쿼리입니다. 

두개의 테이블을 조인시켜 

#{GROUP_NO}을 8자리 까지만 잘라서 공통된것을 뿌리기 위한 쿼리인데요...

페이징이 ...헷갈립니다. 

페이징이 되긴 되는데 2페이지로 넘어가질 않고.. 쿼리출력해봐도 비긴인덱스1 엔드인덱스15고정이라서...

쿼리잘못인지..뭔지 헷갈리네요... 

by 마농 [2015.08.18 16:16:59]

1. 두 테이블을 조인하는데, 조인 조건이 없네요???
  - 조인 조건이 없으면 카티션프러덕이 발생하여 데이터가 뻥튀기 됩니다.
2. 페이징을 위한 정렬조건은 유니크한 항목이 포함되어야 합니다.
  - 중복값으로 정렬시 중복값끼리 어떤 순서로 정렬될지 장담할 수 없습니다.
3. * 사용하셨네요
  - 필요한 컬럼만 적어주시는 게 좋습니다.
4. 바인드변수 사용에 대한 이해가 부족하신 듯 합니다.
  - 변수값은 사용자가 바꾸어 주는 것입니다.


by 김이수 [2015.08.18 16:23:14]

와...정말 감사합니다. 쿼리를 짜고 정말 이게 잘짠거맞나...하는 궁금함이있었는데 시원하게 긁어주시네요.  조인 조건...의 예를 간단하게 설명부탁드려도 될까요?..다른부분은 다 이해가 되었는데..그부분은 어떤..것인지 잘 모르겠습니다. 


by 마농 [2015.08.18 16:54:10]
-- 조인은 두 테이블의 연결 관계를 기술해 주는 것입니다.

SELECT e.empno
     , e.ename
     , d.dname
  FROM emp  e    -- 사원 14건
     , dept d    -- 부서  4건
 WHERE e.deptno = d.deptno    -- 부서번호로 조인
;
--> 결과는 14건

SELECT e.empno
     , e.ename
     , d.dname
  FROM emp  e    -- 사원 14건
     , dept d    -- 부서  4건
-- WHERE e.deptno = d.deptno    -- 조인조건 누락
;
--> 결과는 14 * 4 = 56건

 


by 김이수 [2015.08.18 16:59:56]

아..감사합니다 이해가 되었습니다.. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입