ホームページ > データベース > mysql チュートリアル > MySQL/MariaDB サブクエリ: 新しいバージョンで ORDER BY の動作が変わるのはなぜですか?

MySQL/MariaDB サブクエリ: 新しいバージョンで ORDER BY の動作が変わるのはなぜですか?

DDD
リリース: 2024-12-31 12:59:17
オリジナル
742 人が閲覧しました

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

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 つの推奨アプローチがあります。

  • 最も外側の 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;
ログイン後にコピー

This order by 句が最も外側のクエリに適用されているかどうかに関係なく、サブクエリがソートされた結果のセットを生成することを保証します。 SELECT.

文書化された動作:

MariaDB はこの動作を公式に文書化しており、サブクエリ内で order by 句を指定することは SQL 標準では許可されていないため、指定する必要があると述べています。順序付けされていない行のセットとして扱われます。推奨されるアプローチは、最も外側のクエリに order by を適用するか、必要に応じて制限を使用することです。

以上がMySQL/MariaDB サブクエリ: 新しいバージョンで ORDER BY の動作が変わるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート