(ORDER BY
の喪失について説明します )
SQL標準では、基本的に、サブクエリは順序付けされていない行のセットであるとされています。これは、オプティマイザーがORDER BY
を自由に無視できることを意味します '派生'テーブル内:FROM ( SELECT ... ORDER BY )
。 MySQLとMariaDBの「最近の」バージョンでは、ORDER BYs
など ドロップされています。 ORDER BY
の場合もあります 無視されます。
一部 状況(これについてはよくわかりません)、LIMIT 99999999
を追加します (大きな数字)ORDER BY
の後 オプティマイザーをだましてORDER BY
を実行させます 。ただし、後で「注文」を無視することはできます。
MySQLの一般的なルール:サブクエリは避けてください。 (サブクエリの方が速い場合もありますが、あなたの場合はそうではありません。)
強力なルール:必要 ORDER BY
があります 結果を並べ替える場合は、最も外側にあります。
LIMIT 3
を追加した場合 最初のクエリの派生テーブルに対して、CHARLES、DAVID、JAMESのみを取得しますが、必ずしもこの順序である必要はありません 。つまり、2つのORDER BY
が必要になります -派生テーブルに1つ、最後に1つ。