ホームページ > データベース > mysql チュートリアル > MariaDB サブクエリが「LIMIT」なしで「ORDER BY」を無視するのはなぜですか?

MariaDB サブクエリが「LIMIT」なしで「ORDER BY」を無視するのはなぜですか?

Barbara Streisand
リリース: 2024-12-30 18:41:09
オリジナル
176 人が閲覧しました

Why Does My MariaDB Subquery Ignore `ORDER BY` Without `LIMIT`?

MySQL/MariaDB サブクエリの ORDER BY 動作

MySQL 5.5 より前のバージョンでは、サブクエリ内の ORDER BY 句は期待どおりに適用されました。ただし、MariaDB の最近のバージョン (10.0.14 など) では、LIMIT 句が指定されていない場合、ORDER BY 句はサブクエリ内に適用されません。

バグまたは動作の変更?

この問題を調査した結果、この動作はバグではなく意図されたものであることが確認されました。 MariaDB は SQL 標準に従っており、サブクエリ内の行に特定の順序を必要としません。したがって、サブクエリ内では ORDER BY 句は無視されます。

文書化された動作

MariaDB のドキュメントによると、ORDER BY 句を最も外側のクエリに適用するか、またはLIMIT 句を追加して、範囲内の順序を強制します。 subquery.

次のクエリは動作の違いを示しています。

SELECT t2.Code
FROM (
  SELECT Country.Code
  FROM Country
  ORDER BY Country.Code DESC
) AS t2;
ログイン後にコピー

LIMIT 句がないと、MariaDB は ORDER を適用しません。サブクエリ内の BY 句により、順序付けされていない結果が得られます。降順を強制するには、LIMIT 句を追加できます。

SELECT t2.Code
FROM (
  SELECT Country.Code
  FROM Country
  ORDER BY Country.Code DESC
  LIMIT 2
) AS t2;
ログイン後にコピー

LIMIT 句を追加すると、サブクエリ内で ORDER BY 句が適用され、正しい降順の結果が得られます。

この動作の変更は MySQL にも影響する可能性があることに注意することが重要です5.5 以降のバージョン。使用しているバージョンの特定の動作を確認するには、必ず公式ドキュメントまたはリリース ノートを参照してください。

以上がMariaDB サブクエリが「LIMIT」なしで「ORDER BY」を無視するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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