[SQL] MySQL은 / MariaDB - 내부 하위 쿼리에 의해 순서
SQLMySQL은 / MariaDB - 내부 하위 쿼리에 의해 순서
나는 아무 문제없이 년 동안 MySQL을 5.5 (또는 이전 버전) 다음과 같은 쿼리를 사용 :
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
내가 필요에 따라 결과의 순서는 항상 하강했다.
지난 주, 난 그냥 (내가 MariaDB 10.0.14로 마이그레이션 사실) 지금 동일한 데이터베이스와 같은 쿼리는 더 이상 내림차순으로 정렬되어 있지 않은 새로운 MySQL 버젼으로 마이그레이션. 이 오름차순으로 정렬 (또는하지 않도록 사실, 자연의 질서를 사용하여 정렬)한다.
이 버그를하거나 경우에 따라서, 캔 누군가가 나에게 말할 수있는이 MySQL을 / MariaDB의 최신 버전에서 동작의 변경 인 경우?
해결법
-
==============================
1.파고의 조금 후에, 나는 모두 당신의 시나리오를 확인할 수 있습니다 :
파고의 조금 후에, 나는 모두 당신의 시나리오를 확인할 수 있습니다 :
MySQL은 5.1 서브 쿼리 내부에 의해 순서를 적용한다.
제한이 제공되지 않는 경우에 리눅스에서 MariaDB 5.5.39는 하위 쿼리 내부에 의해 순서가 적용되지 않습니다. 해당 LIMIT가 주어 졌을 때 그것은 그러나 제대로 순서를 적용 않습니다 :
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2 ) AS t2;
그 제한없이, 서브 쿼리 내에서 정렬을 적용하는 좋은 이유가 없습니다. 그것은 동등하게 외부 쿼리에 적용 할 수 있습니다.
그것이 나오는 것에 따라, MariaDB이 동작을 문서화하고이를 버그로 간주되지 않습니다
그래서 MariaDB는 가장 바깥 쪽 쿼리, 또는 LIMIT 필요에 의해 순서를 적용하는 것이 좋습니다.
참고 : 나는 행동이이 같은 경우 현재 확인에 적절한 MySQL을 5.5 또는 5.6에 액세스 할 수없는 (그리고 SQLFiddle.com 제대로 작동하지 않습니다). (하지-A-버그로 폐쇄) 원래 버그 보고서에 대한 의견은 MySQL의 5.6 아마 MariaDB와 같은 방식으로 동작하는 것이 좋습니다.
-
==============================
2.MySQL과 MariaDB의 최신 버전에서 당신은 LIMIT를 적용하여 하위 쿼리에 의해 순서를 강제 할 수 있습니다. 당신이 행을 제한하지 않으려면 제한으로 BIGINT의 가장 큰 번호를 사용합니다.
MySQL과 MariaDB의 최신 버전에서 당신은 LIMIT를 적용하여 하위 쿼리에 의해 순서를 강제 할 수 있습니다. 당신이 행을 제한하지 않으려면 제한으로 BIGINT의 가장 큰 번호를 사용합니다.
하위 쿼리 예를 들어, 줄 번호를 적용하기위한, 원하는 순서로 생성해야 할 때, 시간에 유용하게 사용할 수 있습니다.
from https://stackoverflow.com/questions/26372511/mysql-mariadb-order-by-inside-subquery by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] - 기존 테이블에 삽입 테이블 또는 뷰가 존재하지 않습니다 ORA-00942가 예외를 얻기 (0) | 2020.04.27 |
---|---|
[SQL] MySQL의 테이블 이름에 특수 문자 (0) | 2020.04.27 |
[SQL] GROUP BY없이 HAVING (0) | 2020.04.27 |
[SQL] SQL Server 관리 Studio에서 SELECT ... INTO OUTFILE에 해당이 있습니까? (0) | 2020.04.27 |
[SQL] 예상하고 오라클에서 작은 따옴표 '를 탈출하는 방법 (0) | 2020.04.27 |