sql >> Database >  >> RDS >> Mysql

MySQL select distinct werkt niet

Vanwege de ORDER BY id DESC clausule, wordt de query behandeld alsof deze is geschreven:

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

behalve dat de id kolommen worden niet teruggestuurd naar de gebruiker (u). De resultatenset moet de id . bevatten erdoor te kunnen bestellen. Het is duidelijk dat deze resultatenset vier rijen heeft, dus dat is wat wordt geretourneerd. (Moraal:sorteer niet op verborgen kolommen - tenzij u weet wat het met uw zoekopdracht gaat doen.)

Probeer:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(met of zonder DESC naar gelang de bevlieging). Dat levert alleen de twee rijen op.

Als u een id moet weten overweeg voor elke naam:

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

Je zou MAX met een even goed effect kunnen gebruiken.

Dit alles is van toepassing op alle SQL-databases, inclusief MySQL. MySQL heeft enkele regels waarmee u GROUP BY-clausules kunt weglaten met enigszins niet-deterministische resultaten. Ik raad af om de functie te misbruiken.

Lange tijd (misschien zelfs nu) stond de SQL-standaard je niet toe om te ordenen op kolommen die niet in de selectielijst stonden, juist om verwarring als deze te voorkomen. Als de resultatenset geen bestelgegevens bevat, wordt de volgorde van de resultatenset 'essentiële volgorde' genoemd; als de bestelkolommen allemaal in de resultatenset verschijnen, is het 'niet-essentiële volgorde' omdat je genoeg gegevens hebt om de gegevens zelf te bestellen.




  1. MySQL in de cloud - Online migratie van Amazon RDS naar uw eigen server:deel2

  2. De structuur wijzigen van jsonb-gegevens die zijn opgeslagen in Postgres

  3. MySQL-query met JOIN die INDEX niet gebruikt

  4. Is het mogelijk om door te gaan met het uitvoeren van code vanaf het punt van falen?