복붙노트

[SQL] MySQL은 / ​​MariaDB - 내부 하위 쿼리에 의해 순서

SQL

MySQL은 / ​​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. ==============================

    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. ==============================

    2.MySQL과 MariaDB의 최신 버전에서 당신은 LIMIT를 적용하여 하위 쿼리에 의해 순서를 강제 할 수 있습니다. 당신이 행을 제한하지 않으려면 제한으로 BIGINT의 가장 큰 번호를 사용합니다.

    MySQL과 MariaDB의 최신 버전에서 당신은 LIMIT를 적용하여 하위 쿼리에 의해 순서를 강제 할 수 있습니다. 당신이 행을 제한하지 않으려면 제한으로 BIGINT의 가장 큰 번호를 사용합니다.

    하위 쿼리 예를 들어, 줄 번호를 적용하기위한, 원하는 순서로 생성해야 할 때, 시간에 유용하게 사용할 수 있습니다.

  3. from https://stackoverflow.com/questions/26372511/mysql-mariadb-order-by-inside-subquery by cc-by-sa and MIT license