mariaDB OrderBy 0 4 478

by 은수 [MySQL] [2020.05.20 12:00:48]



SELECT `tag_master`.*
FROM `tag_master`
         LEFT JOIN worker creator on creator.id = tag_master.creator_id
         LEFT JOIN worker last_updator on last_updator.id = tag_master.last_updator_id
         LEFT JOIN tag_master_i18n on tag_master.id = tag_master_i18n.tag_master_id
         LEFT JOIN tag_category on tag_category.id = tag_master.tag_category_id
WHERE (tag_category.code = 'TOUR')
GROUP BY tag_master.id
ORDER BY last_updator.name asc
LIMIT 100 OFFSET 0;

 

해당 쿼리에서 ORDER BY절에 해당하는 컬럼의 값(last_updator.name)이 모두 같은경우입니다. 

이 상황에서 어떤 기준으로 정렬을 하고있는지 궁금합니다.

해당쿼리 결과를 사진으로 첨부합니다.

by 마농 [2020.05.20 13:08:34]

정렬 기준값이 동일하다면? 어떻게 정렬이 될지는 알 수 없죠.
이렇게 중복된 키로 정렬을 하면서 페이징 처리를 하면 안됩니다.
페이징 처리를 하기 위한 정렬기준은 유니크하게 하는게 좋습니다.
- 원본 : ORDER BY last_updator.name (중복키 정렬)
- 수정 : ORDER BY last_updator.name, tag_master.id  (유일키 정렬 추가)


by 은수 [2020.05.20 14:03:22]

답변감사합니다. 

질문이 하나 더 있는데 정렬기준값이 동일할경우 어떻게 정렬하는지 알수없을뿐더러 그 정렬 기준에 대한 설정을 바꿀수도 없는것인가요?


by 마농 [2020.05.20 14:29:52]

내부적인 정렬 매카니즘이나 알고리즘을 파해쳐 보면 알 수는 있겠죠.
굳이 그래야 하는지?


by 은수 [2020.05.20 14:50:21]

그렇군요... 도움이 많이 됬습니다. 답변감사합니다 !!

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