쿼리 실행순서 질문드립니다. 0 2 1,693

by zizondazi [MySQL] Mariadb [2022.12.06 13:32:33]


desc.png (10,543Bytes)
asc.png (9,899Bytes)

안녕하세요. 

방금 질문을 잘못 올린거 같아 다시 질문 올립니다.

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번째 그림처럼 정상적으로 나오고 있습니다. 이유가 있을까요? 

 

by 마농 [2022.12.06 13:52:18]

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
;

 


by zizondazi [2022.12.06 14:07:31]

아 감사합니다!!!! 실제 사용은 row_number()를 사용하긴 했는데 저렇게 나오는 이유가 궁금했었거든요!! 

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