(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つ。