sql >> Databasteknik >  >> RDS >> Mysql

MySQL select distinct fungerar inte

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.




  1. Ser fram emot PGConf India 2017

  2. MySQL NET Connect 6.7.2 i Visual Studio 2012

  3. Fjärrsäkerhetskopiering av MySQL-databas

  4. Infoga stora mängder data effektivt med SQL