-
[MySQL] MySQL에서 ROW_NUMBER 사용하기개발/Database 2019. 2. 19. 17:43
오라클, 티베로..등에서 쿼리를 짤 때 툭하면 ROW_NUMBER() OVER 를 줘서 뽑다가 MySQL로 오니 당연히 신택스 에러가 떨어진다.
MySQL에서는 특이하게도 SELECT 절에서 function 을 활용한다거나 이런 방식이 아니라
변수를 선언하고 이 변수에 1씩 더해서 뽑아내는 방식으로 Row num을 줄 수 있다.
알고보니 MySQL에서는 쿼리에서도 변수를 선언해서 사용할 수 있고
이걸 응용해서 뽑아내는 것 같다.
일단 쿼리를 보자면 요렇게
123456789101112SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM,TB.*FROM (SELECT NOTE_NO,NOTE_TITLE,NOTE_CONTENTSFROM EXAMPLE.NOTEORDER BY NOTE_NO ASC) AS TB,(SELECT @ROWNUM := 0)cs 11번 라인과 같이 FROM 절에서 @ROWNUM := 0 라고 변수를 하나 선언해준 다음
1번 라인처럼 SELECT 절에서 @ROWNUM + 1 을 선언하면
신비롭게도 ROW_NUMBER()와 같은 효과가 일어난다...!
페이징 처리에 응용하게 된다면 요렇게
1234567891011121314SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM,TB.*FROM (SELECT NOTE_NO,NOTE_TITLE,NOTE_CONTENTSFROM EXAMPLE.NOTEORDER BY NOTE_NO ASC) AS TB,(SELECT @ROWNUM := 0)LIMIT 0, 10cs 13번 라인처럼 LIMIT 한줄만 추가해줘서 몇번부터 몇번까지만 뽑아올지를 지정해주면 된다.
'개발 > Database' 카테고리의 다른 글
[Oracle] 계정 잠금 해체 (0) 2019.07.20 [Oracle] 시퀀스의 현재값 변경하기 (0) 2019.05.08 [postgreSQL] 멀쩡한 컬럼인데 column does not exist 오류가 발생할 때 (0) 2019.01.17 SYS_CONTEXT 함수로 세션정보 추출하기 (0) 2019.01.14 TABLE Function 이라는 것도 있다 (0) 2019.01.09 댓글