마리아db 순번 - 정렬 후 순번 rownum
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