> 데이터 베이스 > MySQL 튜토리얼 > MySQL/MariaDB 하위 쿼리: 최신 버전에서 ORDER BY 동작이 변경되는 이유는 무엇입니까?

MySQL/MariaDB 하위 쿼리: 최신 버전에서 ORDER BY 동작이 변경되는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-31 12:59:17
원래의
753명이 탐색했습니다.

MySQL/MariaDB Subqueries: Why Does ORDER BY Behavior Change in Newer Versions?

MySQL/MariaDB: 하위 쿼리 내에서 정렬

최신 버전의 MySQL 및 MariaDB에는 하위 쿼리 내 작업별 정렬 처리 방식이 변경되었습니다.

원본 쿼리:

SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
로그인 후 복사

문제:

MySQL 5.5 이하에서 위 쿼리는 하위 쿼리 결과를 지정된 대로 내림차순으로 정렬했습니다. 그러나 최신 버전의 MySQL 및 MariaDB에서는 기본적으로 하위 쿼리 결과가 더 이상 내림차순으로 정렬되지 않습니다.

이유:

동작 변경은 더 엄격한 기준으로 인해 발생합니다. SQL 표준을 준수합니다. 표준에 따르면 하위 쿼리 결과는 순서가 지정되지 않은 행 집합입니다. 따라서 하위 쿼리 내에 order by 절을 적용하면 원하는 정렬이 보장되지 않을 수 있습니다.

해결 방법:

문제를 해결하려면 다음 두 가지 권장 접근 방식이 있습니다.

  • 가장 바깥쪽 Order By: 가장 바깥쪽 SELECT에 order by 절을 적용합니다. 명령문:
SELECT t2.Code from (select Country.Code from Country) AS t2 ORDER BY t2.Code DESC;
로그인 후 복사
  • 하위 쿼리의 제한: 필요한 경우 하위 쿼리 내에서 제한을 지정합니다.
SELECT t2.Code from (select Country.Code from Country ORDER BY Country.Code DESC LIMIT 2) AS t2;
로그인 후 복사

이것은 order by 절이 가장 바깥쪽에 적용되는지 여부에 관계없이 하위 쿼리가 정렬된 결과 집합을 생성하도록 보장합니다. SELECT.

문서화된 동작:

MariaDB는 이 동작을 공식적으로 문서화했으며, 하위 쿼리 내에서 order by 절을 지정하는 것은 SQL 표준에서 허용되지 않으며 반드시 그래야 한다고 명시했습니다. 순서가 지정되지 않은 행 집합으로 처리됩니다. 권장되는 접근 방식은 가장 바깥쪽 쿼리에 순서 기준을 적용하거나 필요한 경우 제한을 사용하는 것입니다.

위 내용은 MySQL/MariaDB 하위 쿼리: 최신 버전에서 ORDER BY 동작이 변경되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿