Поради ORDER BY id DESC
клауза, заявката се третира по-скоро така, сякаш е написана:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
с изключение на id
колони не се връщат на потребителя (вие). Резултатният набор трябва да включва id
за да можете да поръчате по него. Очевидно този набор от резултати има четири реда, така че това се връща. (Морал:не подреждайте по скрити колони — освен ако не знаете какво ще направи това с вашата заявка.)
Опитайте:
SELECT DISTINCT name
FROM table
ORDER BY name;
(със или без DESC според желанието). Това ще върне само двата реда.
Ако трябва да знаете id
за всяко име помислете за:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
Можете да използвате MAX за също толкова добър ефект.
Всичко това се отнася за всички SQL бази данни, включително MySQL. MySQL има някои правила, които ви позволяват да пропускате клаузи GROUP BY с донякъде недетерминистични резултати. Препоръчвам ви да не използвате функцията.
Дълго време (може би дори сега) SQL стандартът не позволяваше да подреждате по колони, които не бяха в списъка за избор, именно за да избегнете объркване като това. Когато наборът от резултати не включва данните за подреждане, подреждането на набора от резултати се нарича „съществено подреждане“; ако всички колони за подреждане се появяват в набора с резултати, това е „несъществено подреждане“, защото имате достатъчно данни, за да подредите данните сами.