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 절을 적용하면 원하는 정렬이 보장되지 않을 수 있습니다.
해결 방법:
문제를 해결하려면 다음 두 가지 권장 접근 방식이 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!