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 サイトの他の関連記事を参照してください。