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

Gilt ORDER BY vor oder nach DISTINCT?

Zwei Dinge zu verstehen:

  1. Im Allgemeinen sind Ergebnismengen ungeordnet es sei denn, Sie geben einen ORDER BY an Klausel; soweit Sie eine nicht strikte Reihenfolge angeben (z. B. ORDER BY über nicht eindeutige Spalten), ist die Reihenfolge, in der Datensätze, die in dieser Reihenfolge gleich sind, in der Ergebnismenge erscheinen, nicht definiert.

    Ich vermute, dass Sie eine solche nicht strikte Reihenfolge angeben, die die Wurzel Ihrer Probleme ist:Stellen Sie sicher, dass Ihre Reihenfolge streng ist, indem Sie ORDER BY angeben über eine Reihe von Spalten, die ausreicht, um jeden Datensatz, dessen endgültige Position in der Ergebnismenge Ihnen wichtig ist, eindeutig zu identifizieren.

  2. DISTINCT kann GROUP BY verwenden , wodurch die Ergebnisse nach den gruppierten Spalten geordnet werden; das heißt, SELECT DISTINCT a, b, c FROM t erzeugt eine Ergebnismenge, die so aussieht, als ob ORDER BY a, b, c angewendet wurde. Auch hier wird dieser Effekt außer Kraft gesetzt, wenn Sie eine ausreichend strenge Reihenfolge angeben, um Ihre Anforderungen zu erfüllen.

Nach Ihrer Aktualisierung und unter Berücksichtigung meines obigen Punkts Nr. 2 ist klar, dass die Gruppierung der Ergebnisse zum Erreichen von DISTINCT Auswirkungen hat macht es unmöglich, nach der nicht gruppierten Spalte p.id zu sortieren; Stattdessen möchten Sie:

SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC