[이슈해결] MySql 서브쿼리 내의 Order By 적용 안됨

kyle·2023년 8월 25일
0

DB

목록 보기
11/14

이슈사항

From 절에서 서브 쿼리를 통해 특정 조건으로 테이블을 생성하여 조회할 수 있는데,
해당 서브쿼리에서 레코드를 Order By 수행하여 조회하는 쿼리를 개발했다.

예를 들어 id 값이 1,2,3 ... , 10 인 테이블이 있을 때, 아래 처럼 쿼리를 수행 했을때 id값을 1부터 순서대로 보여줄 것이라고 생각했는데, 서브쿼리 내의 ORDER BY 수행한 결과가 적용되지 않았다.

select a.id, b.name
from ( select * from tableA ORDER BY id) a
join tableB b on a.id = b.id

해결

공식문서까지 찾아본 결과 SQL 내부에서 서브쿼리의 레코드 순서를 보장하지 않는다고 한다 .

즉, 서브쿼리에서 ORDER BY는 LIMIT 같은 특정 데이터를 제한하기 위함이라면 유의미하지만
단지 레코드를 정렬하기 위함이라면 의미 없는 것 같다.

이번 이슈는 from절의 서브쿼리가 꼭 필요한 부분이었기 때문에, 아래와 같이 ORDER BY를 한번 더 수행해서 문제를 해결했다.

select a.id, b.name
from ( select * from tableA ORDER BY id) a
join tableB b on a.id = b.id
ORDER BY a.id
profile
서버 개발자의 소소한 개발 일기

0개의 댓글