Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Select Distinct funktioniert nicht

Wegen ORDER BY id DESC -Klausel wird die Abfrage so behandelt, als ob sie geschrieben wäre:

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

außer dass die id Spalten werden nicht an den Benutzer (Sie) zurückgegeben. Die Ergebnismenge muss die id enthalten damit bestellen zu können. Offensichtlich hat diese Ergebnismenge vier Zeilen, also wird das zurückgegeben. (Moral:Ordne nicht nach versteckten Spalten – es sei denn, du weißt, was es mit deiner Abfrage machen wird.)

Versuchen Sie:

SELECT DISTINCT name
  FROM table
 ORDER BY name;

(mit oder ohne DESC nach Lust und Laune). Das gibt nur die zwei Zeilen zurück.

Wenn Sie eine id wissen müssen Berücksichtigen Sie für jeden Namen:

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

Sie könnten MAX mit gleich guter Wirkung verwenden.

All dies gilt für alle SQL-Datenbanken, einschließlich MySQL. MySQL hat einige Regeln, die es Ihnen erlauben, GROUP BY-Klauseln mit etwas nicht deterministischen Ergebnissen wegzulassen. Ich rate davon ab, diese Funktion auszunutzen.

Lange Zeit (vielleicht sogar jetzt) ​​erlaubte Ihnen der SQL-Standard nicht, nach Spalten zu sortieren, die nicht in der Auswahlliste waren, gerade um solche Verwirrungen zu vermeiden. Wenn die Ergebnismenge die Sortierdaten nicht enthält, wird die Reihenfolge der Ergebnismenge als „wesentliche Reihenfolge“ bezeichnet; Wenn die Sortierspalten alle in der Ergebnismenge erscheinen, handelt es sich um eine „unwesentliche Reihenfolge“, da Sie über genügend Daten verfügen, um die Daten selbst zu ordnen.