ORDER BY id DESC
のため 句では、クエリは書かれたかのように扱われます:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
id
を除いて 列はユーザー(あなた)に返されません。結果セットには、id
が含まれている必要があります それで注文できるように。明らかに、この結果セットには4つの行があるため、これが返されます。 (モラル:非表示の列で並べ替えないでください。クエリに対して何が行われるかがわからない場合を除きます。)
試してみてください:
SELECT DISTINCT name
FROM table
ORDER BY name;
(気まぐれによるDESCの有無にかかわらず)。 2行だけが返されます。
id
を知る必要がある場合 名前ごとに、次のことを考慮してください。
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
MAXを使用して同様に効果を上げることができます。
これはすべて、MySQLを含むすべてのSQLデータベースに適用されます。 MySQLには、多少非決定論的な結果をもたらすGROUPBY句を省略できるいくつかのルールがあります。この機能を利用しないことをお勧めします。
長い間(おそらく今でも)、SQL標準では、このような混乱を避けるために、選択リストにない列で並べ替えることはできませんでした。結果セットに順序付けデータが含まれていない場合、結果セットの順序付けは「必須順序付け」と呼ばれます。順序付け列がすべて結果セットに表示される場合、データを自分で順序付けるのに十分なデータがあるため、「不必要な順序付け」です。