Kvůli ORDER BY id DESC
klauzule, s dotazem se zachází spíše tak, jako by byl napsán:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
kromě id
sloupce nejsou vráceny uživateli (vám). Sada výsledků musí obsahovat id
abych si podle toho mohl objednat. Je zřejmé, že tato sada výsledků má čtyři řádky, takže je to vráceno. (Morální:neseřazujte podle skrytých sloupců – pokud nevíte, co to udělá s vaším dotazem.)
Zkuste:
SELECT DISTINCT name
FROM table
ORDER BY name;
(s nebo bez DESC podle rozmaru). Tím se vrátí pouze dva řádky.
Pokud potřebujete znát id
pro každé jméno zvažte:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
Ke stejně dobrému efektu můžete použít MAX.
To vše platí pro všechny SQL databáze včetně MySQL. MySQL má některá pravidla, která vám umožňují vynechat klauzule GROUP BY s poněkud nedeterministickými výsledky. Nedoporučuji tuto funkci zneužívat.
Standard SQL dlouho (možná i nyní) neumožňoval řazení podle sloupců, které nebyly ve výběrovém seznamu, právě proto, aby nedocházelo k takovým zmatkům, jako je tento. Když sada výsledků nezahrnuje data řazení, seřazení sady výsledků se nazývá 'základní uspořádání'; pokud se v sadě výsledků objeví všechny sloupce řazení, jedná se o „nepodstatné uspořádání“, protože máte dostatek dat na to, abyste si je mohli sami seřadit.