Mysql
 sql >> Base de données >  >> RDS >> Mysql

ORDER BY s'applique-t-il avant ou après DISTINCT ?

Deux choses à comprendre :

  1. De manière générale, les jeux de résultats sont non ordonnés sauf si vous spécifiez un ORDER BY clause; dans la mesure où vous spécifiez un ordre non strict (c'est-à-dire ORDER BY sur des colonnes non uniques), l'ordre dans lequel les enregistrements qui sont égaux dans cet ordre apparaissent dans le jeu de résultats n'est pas défini.

    Je soupçonne que vous spécifiez peut-être un tel ordre non strict, qui est à l'origine de vos problèmes :assurez-vous que votre ordre est strict en spécifiant ORDER BY sur un ensemble de colonnes suffisant pour identifier de manière unique chaque enregistrement pour lequel vous vous souciez de sa position finale dans le jeu de résultats.

  2. DISTINCT peut utiliser GROUP BY , ce qui entraîne le tri des résultats par les colonnes groupées ; c'est-à-dire SELECT DISTINCT a, b, c FROM t produira un jeu de résultats qui apparaît comme si ORDER BY a, b, c a été appliqué. Encore une fois, spécifier un ordre suffisamment strict pour répondre à vos besoins annulera cet effet.

Suite à votre mise à jour, en gardant à l'esprit mon point 2 ci-dessus, il est clair que l'effet de regrouper les résultats pour obtenir DISTINCT rend impossible le tri ensuite par la colonne non groupée p.id; à la place, vous voulez :

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