På grund av ORDER BY id DESC
sats, behandlas frågan snarare som om den var skriven:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
förutom att id
kolumner returneras inte till användaren (dig). Resultatuppsättningen måste inkludera id
att kunna beställa efter det. Uppenbarligen har denna resultatuppsättning fyra rader, så det är vad som returneras. (Moral:ordna inte efter dolda kolumner – om du inte vet vad det kommer att göra med din fråga.)
Försök:
SELECT DISTINCT name
FROM table
ORDER BY name;
(med eller utan DESC enligt infall). Det kommer bara att returnera de två raderna.
Om du behöver veta ett id
För varje namn, överväg:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
Du kan använda MAX med lika god effekt.
Allt detta gäller alla SQL-databaser, inklusive MySQL. MySQL har några regler som gör att du kan utelämna GROUP BY-satser med något icke-deterministiska resultat. Jag rekommenderar att du inte utnyttjar funktionen.
Under lång tid (kanske till och med nu) tillät SQL-standarden dig inte att sortera efter kolumner som inte fanns i urvalslistan, just för att undvika förvirringar som denna. När resultatuppsättningen inte inkluderar beställningsdata, kallas ordningen för resultatuppsättningen "väsentlig beställning"; om beställningskolumnerna alla visas i resultatuppsättningen är det "nödvändig ordning" eftersom du har tillräckligt med data för att beställa data själv.