티스토리 뷰

SET @rownum:=0;

SELECT
@rownum:=@rownum + 1 as rNum,
t1.*
FROM
TABLE_NAME t1
;


하이디 sql 등 db 툴에서 쿼리만 실행할때 rNum이 잘 안나올 수 있다. NULL이나 1번부터 시작이 아닌..

왜그런가 봤더니 세미콜론으로 2개의 쿼리가 있어서 그랬다.

프로그램에서 mybatis 안에 쿼리가 있을때는 한번에 실행이 되겠지만 하이디sql 등에서 세미콜론에 있는 쿼리만 실행하는 (현재 쿼리 실행) ctrl + shift + F9 를 누르면 잘 안될 수 있다.
SET 부분이 실행이 안되고 SELECT에 커서를 두고 실행한 경우..

그래서 SET 부분도 같이 실행이 되야 하니 그냥 실행 F9를 눌러서 하면 잘 된다.

그리고 join 및 정렬 ORDER BY 등이 있으면 rownum이 순서대로 잘 안된다. join 및 정렬을 다 하고 다시 rownum을 부여해야 하니 select를 2번 써줘야 한다.

=====================================

위와 같은 방법으로 정렬 해도 rownum이 잘 나올 줄 알았는데 잘 나오지 않았다.

마리아 db는 서브쿼리 결과를 메모리에 적재하지 안하서 안된다고 한다.

https://mariadb.com/kb/en/mariadb/why-is-order-by-in-a-from-subquery-ignored/

Why is ORDER BY in a FROM Subquery Ignored?

Query with ORDER BY in a FROM subquery produces an unordered result.

mariadb.com



이를 해결하기 위해서는 ORDER BY 밑에 LIMIT 를 넣어 주니 잘 되었다.

SELECT @rownum:=@rownum+1 as num, x.*

  FROM (SELECT  col1, col2

             FROM TABLE1

           ORDER BY col2

           LIMIT 18446744073709551615

) X,

          (SELECT @rownum:=0) r


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함