sql >> Databasteknik >  >> RDS >> Mysql

Gäller ORDER BY före eller efter DISTINCT?

Två saker att förstå:

  1. Generellt sett är resultatuppsättningar oordnade om du inte anger en ORDER BY klausul; i den mån du anger en icke strikt ordning (dvs. ORDER BY över icke-unika kolumner), är ordningen i vilken poster som är lika under den ordningen visas i resultatuppsättningen odefinierad.

    Jag misstänker att du kanske anger en sådan icke-strikt beställning, vilket är roten till dina problem:se till att din beställning är strikt genom att ange ORDER BY över en uppsättning kolumner som är tillräcklig för att unikt identifiera varje post som du bryr dig om dess slutliga position i resultatuppsättningen.

  2. DISTINCT kan använda GROUP BY , vilket gör att resultaten sorteras efter de grupperade kolumnerna; det vill säga SELECT DISTINCT a, b, c FROM t kommer att producera en resultatuppsättning som ser ut som om ORDER BY a, b, c har tillämpats. Återigen, att specificera en tillräckligt strikt ordning för att möta dina behov kommer att åsidosätta denna effekt.

Efter din uppdatering, med tanke på min punkt #2 ovan, är det tydligt att effekten av att gruppera resultaten för att uppnå DISTINCT gör det omöjligt att sedan sortera efter den icke-grupperade kolumnen p.id; istället vill du:

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


  1. SQL Server-fråga:Snabb med bokstavlig men långsam med variabel

  2. php / Mysql bästa trädstruktur

  3. Introduktion till Failover för MySQL-replikering - 101-bloggen

  4. Varning:mysql_connect():Kan inte ansluta till lokal MySQL-server