MySQL/MariaDB: サブクエリ内の Order by
MySQL と MariaDB の最近のバージョンでは、サブクエリ内の order by オペレーションの処理に変更が導入されました。
オリジナルクエリ:
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
問題:
MySQL 5.5 以前では、上記のクエリは指定どおりにサブクエリの結果を降順に並べ替えていました。ただし、MySQL と MariaDB の新しいバージョンでは、サブクエリの結果はデフォルトで降順に並べ替えられなくなりました。
理由:
動作の変更は、より厳密な規則によるものです。 SQL 標準への準拠。標準に従って、サブクエリの結果は順序付けされていない行のセットになります。したがって、サブクエリ内で order by 句を適用しても、目的の並べ替えが保証されない可能性があります。
解決策:
この問題を解決するには、次の 2 つの推奨アプローチがあります。
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;
This order by 句が最も外側のクエリに適用されているかどうかに関係なく、サブクエリがソートされた結果のセットを生成することを保証します。 SELECT.
文書化された動作:
MariaDB はこの動作を公式に文書化しており、サブクエリ内で order by 句を指定することは SQL 標準では許可されていないため、指定する必要があると述べています。順序付けされていない行のセットとして扱われます。推奨されるアプローチは、最も外側のクエリに order by を適用するか、必要に応じて制限を使用することです。
以上がMySQL/MariaDB サブクエリ: 新しいバージョンで ORDER BY の動作が変わるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。