안녕하세요.
방금 질문을 잘못 올린거 같아 다시 질문 올립니다.
rownum과 상관없이 실행 순서의 문제인거 같아서요.
특정 db에서 만 아래의 현상이 일어나고 있습니다.
select @rownum := @rownum + 1 as runm, a.reg_dtm from(select * from product_mng ,( SELECT @ROWNUM := 0 ) R ) a order by a.reg_dtm asc;
위 쿼리 시 select 조회 후 > order by 로 rnum이 3번째 이미지처럼 뒤죽박죽으로 나오는게 정상일거같은데 특정db에서는 1,2번째 그림처럼 정상적으로 나오고 있습니다. 이유가 있을까요?
MySQL, MariaDB 의 경우 오라클이나 MSSQL 과 달리
SQL 표준을 따르지 않는 구문이나 동작이 많습니다.
그냥 이럴땐 이렇게 동작하는구나 기억하고 넘어가시면 됩니다.
-- 이렇게 하면 뒤죽박죽 나옵니다.
SELECT *
FROM (SELECT @rownum := @rownum + 1 AS rnum
, reg_dtm
FROM text_book
, (SELECT @rownum := 0 ) r
) a
ORDER BY reg_dtm DESC
;
-- 10.4 버전이면 분석함수 사용하세요.
SELECT ROW_NUMBER() OVER(ORDER BY reg_dtm DESC) AS rnum
, reg_dtm
FROM text_book
;
아 감사합니다!!!! 실제 사용은 row_number()를 사용하긴 했는데 저렇게 나오는 이유가 궁금했었거든요!!