sql >> Database teknologi >  >> RDS >> Mysql

MySQL select distinct virker ikke

På grund af ORDER BY id DESC klausul, behandles forespørgslen snarere, som om den var skrevet:

SELECT DISTINCT name, id
  FROM table
 ORDER BY id DESC;

bortset fra at id kolonner returneres ikke til brugeren (dig). Resultatsættet skal inkludere id at kunne bestille efter det. Dette resultatsæt har naturligvis fire rækker, så det er det, der returneres. (Moral:sorter ikke efter skjulte kolonner - medmindre du ved, hvad det vil gøre ved din forespørgsel.)

Prøv:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(med eller uden DESC alt efter indfald). Det vil kun returnere de to rækker.

Hvis du har brug for at kende et id For hvert navn skal du overveje:

SELECT name, MIN(id)
  FROM table
 GROUP BY name
 ORDER BY MIN(id) DESC;

Du kan bruge MAX til lige så god effekt.

Alt dette gælder for alle SQL-databaser, inklusive MySQL. MySQL har nogle regler, som giver dig mulighed for at udelade GROUP BY-klausuler med noget ikke-deterministiske resultater. Jeg fraråder at udnytte funktionen.

I lang tid (måske endda nu) tillod SQL-standarden dig ikke at sortere efter kolonner, der ikke var i select-listen, netop for at undgå forvekslinger som denne. Når resultatsættet ikke inkluderer bestillingsdata, kaldes rækkefølgen af ​​resultatsættet 'essentiel bestilling'; hvis bestillingskolonnerne alle vises i resultatsættet, er det 'essentiel bestilling', fordi du har nok data til selv at bestille dataene.




  1. MySql-kommentarer til kolonnerne i en visning?

  2. Findes i markøren, hvor betingelsen er opfyldt

  3. ændre standard datoformat laravel sql-forespørgsel

  4. BadImageFormatException. Dette vil ske, når du kører i 64 bit-tilstand med 32-bit Oracle-klientkomponenterne installeret